自定义函数实现NULL值替换

数据库环境:SQL SERVER 2005

  有时候,想将查询查询数来的数据格式化一下,不希望显示NULL值,或者复制表的数据时,被插入的表不允许有NULL。

我们可以通过ISNULL()函数或者COALESCE()函数对数据进行转换。

  如果要转换的字段太多,不想一个个字段去转,是否有什么办法批量转换NULL值呢?

  实现思路:

  我们通过系统表sys.all_columns关联sys.types表找到某个表的所有字段及其类型,如果该字段是允许NULL的,则进行转换。

转换规则:如果是数值类型,则将NULL转换成0,否则,转换成空字符串。

  下面是SQL实现,已经将它封装到表变量中,需要的时候直接传个表名进去调用即可。

ALTER FUNCTION [dbo].[f_null_cast]
    (
      @table_name VARCHAR(20)--表名
    )
RETURNS VARCHAR(MAX)
AS
    BEGIN
        DECLARE @sql_text VARCHAR(MAX);
            WITH    x0
                      AS ( SELECT   TOP 200 ‘,‘
                                    + CASE WHEN c.is_nullable = 0 THEN c.name
                                           WHEN t.name IN ( ‘smallint‘, ‘int‘,
                                                            ‘decimal‘ )
                                           THEN ‘ISNULL(‘ + c.name + ‘,0) as ‘
                                                + c.name
                                           ELSE ‘ISNULL(‘ + c.name
                                                + ‘,‘‘‘‘) as ‘ + c.name
                                      END AS name_column
                           FROM     sys.all_columns AS c ,
                                    sys.types AS t
                           WHERE    c.system_type_id = t.system_type_id
                                    AND t.name <> ‘sysname‘
                                    AND c.object_id = OBJECT_ID(@table_name)
                                    ORDER BY c.column_id--根据字段创建的先后顺序排序
                         )
            SELECT  @sql_text = ‘select ‘ + STUFF(( SELECT  name_column + ‘‘
                                                    FROM    x0
                                                  FOR
                                                    XML PATH(‘‘)
                                                  ), 1, 1, ‘‘) + ‘ from ‘
                    + @table_name
        RETURN @sql_text

    END

  有一张testdemo表,表结构的定义语句如图1:

  执行SQL语句 “SELECT dbo.f_null_cast(‘testdemo‘) AS sql_text”,得到转换的结果如图2,图2的SQL是我用格式化工具

调整格式后的结果。

时间: 2024-11-09 00:49:37

自定义函数实现NULL值替换的相关文章

Mysql中使用聚合函数对null值的处理

平时因为对于数据库研习的不深,所以在面试的时候问了一些平常遇到过的问题居然没法很肯定地回答出来,实在让自己很恼怒! 这次让我记忆深刻的一个问题是: 在mysql中使用聚合函数的时候比如avg(t),t是表中一个类型int型的字段,可为null,有三行数据,三行中的数据分别为:10,null,20,请问最后的结果是什么? 我的回答是15,在面试结束之后我尝试了一下结果没错,不过我对于聚集函数对null的处理貌似错了,我认为是聚合函数会将null值看作0,找了一番,博客中都认为是忽略null值,因为

oracle 中的round()函数、null值,rownum

round()函数:四舍五入函数 传回一个数值,该数值按照指定精度进行四舍五入运算的结果. 语法:round(number[,decimals]) Number:待处理的函数 Decimals:精度,默认为0: Select round(123.456,0) as a,round(123.456,1) as b,round(123.456,-1) as c from dual; null值: NULL值就是没有值或者缺值.允许NULL值的列也允许在插入行时不给出该列的值.不允许NULL值的列不接

decimal类型不能为空,自定义update更新null值的问题。

if (!string.IsNullOrEmpty(yt_time_limit_1)) { entity["yt_time_limit_1"] = Convert.ToDecimal(yt_time_limit_1); } else { entity["yt_time_limit_1"] = "null"; } cd.UpdateFaultComponent(entity); public bool UpdateFaultComponent(En

第八讲 python自定义函数返回值

注意自定义函数:统一文件内函数名称不能相同. 单返回值 语法结构: def function_name([para1,para2...]) code... code... ... return value--------------可以返回一个值 eg: def test_c(n1,n2):-------------函数定义    n=n1+n2    return n sum1=test_c(100,102)----------函数调用----最好不要用sum,因为sum为关键字print '

mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享

转自:http://www.maomao365.com/?p=6965   摘要: 下文将分享两种将字段中null值替换为指定值的方法分享,如下所示: 实验环境:sqlserver 2008 R2 例: create table test(keyId int identity, info varchar(30)) go insert into test(info)values('a'),('b'),(null),('d') go ---方法1:使用isnull替换 select keyId,is

13、SQL Server 自定义函数

SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值函数用于返回单个值,而表值函数用于返回一个结果集. 函数参数 参数可以是常量.表中的某个列.表达式或其他类型的值.在函数中有三种类型的参数. 1.输入:指必须输入一个值. 2.可选值:在执行该参数时,可以选择不输入参数. 3.默认值:函数中默认有值存在,调用时可以不指定该值. 创建标量值函数 语法:

细说Oracle中NULL值

1.NULL是什么? NULL表示UNKNOW(未知),其不代表不论什么值. 比如一行中某列没有不论什么值即为NULL. ORACLE同意不论什么一种数据类型的字段为空,除了下面两种情况: 1)主键字段(primary key), 2)定义时已经加了NOT NULL限制条件的字段 2.NULL有什么用? 1)NULL可用于条件推断: SELECT * FROM EMP WHERE COMM IS NULL; 或 SELECT * FROM EMP WHERE COMM IS NOT NULL;

不再迷惑,无值和NULL值

在关系型数据库的世界中,无值和NULL值的区别是什么?一直被这个问题困扰着,甚至在写TSQL脚本时,战战兢兢,如履薄冰,害怕因为自己的一知半解,挖了坑,贻害后来人,于是,本着上下求索,不达通幽不罢休的决心(开个玩笑),遂有此文. 学习过关系型数据库的伙伴都知道,NULL是指不确定的值,在数据库中绝对是噩梦的存在:而空值,一般对字符串类型而言,指没有任何值的字符串类型,为字符类型的变量设置为空值:set @vs='',空值跟无值不同.有人可能会问,无值是什么?无值,是指数据表中没有任何数据.无值和

第七讲 python自定义函数

函数:将功能封装 语法结构 def function_name (参数......) code.... code.... code.... 注意: 1,尾部有冒号 2,不用花括号,但是需使用相同的缩进,如果没有相同缩进,则不作为函数体而是作为主程序 3,自定义函数无返回值类型-------------无类型之说 无形参: def test_a():    print 'hello robin'    print 'www.baidu.com' test_a()-------调用函数(任意地方,不