日期:2014-05-17  浏览次数:20497 次

MSSQL判断一个数是否为整数,是否为小数,更新表所有列为NULL为空
本帖最后由 inghot 于 2013-08-16 23:18:11 编辑
一、有两个判断:
1.判断一个数是否为正整数
2.判断一个数是否为正小数(包含正整数,小数位数不限,只能包含数字和小数点)
都可包含0
(上面的简单描述为分别找出表某列为正整数,正小数的记录)

二、一个表有多列,每列的每行都有可能是NULL(除主键),我现在要更新这个表中所有为NULL的为空('')
有什么好方法?
以前只知道一列一列判断更新,想知道有没有批量的方法,毕竟表多列多,一列一列要写N多语句。

希望给简单一点的方法
谢谢。

------解决方案--------------------

/*
一、有两个判断:
1.判断一个数是否为正整数
2.判断一个数是否为正小数(包含正整数,小数位数不限,只能包含数字和小数点)
都可包含0
(上面的简单描述为分别找出表某列为正整数,正小数的记录)
*/

select * from [表名]
where ([字段]>0 and [字段]%1.0=0) -- 正整数
and ([字段]>0) -- 正小数(包含正整数,小数位数不限,只能包含数字和小数点)


/*
二、一个表有多列,每列的每行都有可能是NULL(除主键),我现在要更新这个表中所有为NULL的为空('')
有什么好方法?
以前只知道一列一列判断更新,想知道有没有批量的方法,毕竟表多列多,一列一列要写N多语句。
*/

update [表名]
 set [字段1]=isnull([字段1],''),
     [字段2]=isnull([字段2],''),
     [字段3]=isnull([字段3],''),
     [字段4]=isnull([字段4],''),
     .
     .
     .

------解决方案--------------------
IF object_id('tempdb..#temp') IS NOT NULL DROP TABLE #temp
go
CREATE TABLE #temp (id INT NOT NULL PRIMARY KEY, field1 FLOAT, field2 DECIMAL(10,2))
INSERT #temp 
SELECT 1, 2.1, 10.8 UNION ALL
SELECT 2, 2.0, 10
--1.判断一个数是否为正整数
SELECT * FROM #temp
WHERE field1 >= 0 AND FLOOR(field1) = field1
--2.判断一个数是否为正小数(包含正整数,小数位数不限,只能包含数字和小数点
SELECT * FROM #temp
WHERE field1 >= 0 AND FLOOR(field1) <> field1

--#3.更新这个表中所有为NULL的为空
DECLARE
@tablename NVARCHAR(255),
@colname NVARCHAR(255),
@sql NVARCHAR(MAX)

DECLARE cursor_name CURSOR STATIC LOCAL FORWARD_ONLY READ_ONLY
FOR
SELECT
tablename = a.name,