首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

MSSQL判断一个数是不是为整数,是否为小数,更新表所有列为NULL为空

2013-09-04 
MSSQL判断一个数是否为整数,是否为小数,更新表所有列为NULL为空[解决办法]/*一、有两个判断:1.判断一个数是

MSSQL判断一个数是否为整数,是否为小数,更新表所有列为NULL为空

[解决办法]


/*
一、有两个判断:
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,


colname = b.name
FROM sys.tables a
INNER JOIN sys.columns b
ON a.object_id = b.object_id
INNER JOIN sys.types c
ON b.user_type_id = c.user_type_id
WHERE a.name = 'a'
AND b.is_identity = 0--排除自增列
AND c.name IN('char','varchar','nchar','nvarchar', 'int')--这儿自己改,参考:SELECT DISTINCT name FROM sys.types 

OPEN cursor_name
FETCH NEXT FROM cursor_name INTO @tablename, @colname

WHILE (@@FETCH_STATUS = 0) 
BEGIN
SET @sql = 'update {1} set {2} = '''' where {2} is null'
SET @sql = REPLACE(@sql,'{1}',@tablename)
SET @sql = REPLACE(@sql,'{2}',@colname)
EXEC(@sql)
PRINT @sql
FETCH NEXT FROM cursor_name INTO @tablename, @colname
END

CLOSE cursor_name
DEALLOCATE cursor_name


[解决办法]
一、有两个判断:
1.判断一个数是否为正整数
select * from 表 where 列>0 and floor(列)=列

2.判断一个数是否为正小数(包含正整数,小数位数不限,只能包含数字和小数点)
select * from 表 where 列>0 and floor(列)<>列

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

热点排行