zoukankan      html  css  js  c++  java
  • (4.60)sql server isnull数据被截断

    【1】isnull 的作用

    在我们日常使用SQL中,isnull的作用就是判断第一个参数是否为 Null,如果是Null 值则使用第二个参数;

    测试数据:

    use test3
    create table test1(
    id int ,str char(100),str1 varchar(100)
    )
    
    insert into test1 values(1,'aaa','bbb'),(null,null,null)
    select * from test1

      

    select isnull(id,1),isnull(str,'b'),isnull(str,'c') from test1

      

    【2】问题所在 isnull 的数据类型会是参数1

    【2.1】数据被截断

    select isnull(id,1),isnull(str ,replicate('a',1000)),isnull(str1,replicate('dd',1000)) from test1

    如下图,

    isnull(str ,replicate('a',1000))

    我们明明是想要变成 1000个 a,结果只有100个,这是因为 str 字段数据类型是 char(100);

    同理

    isnull(str1,replicate('dd',1000))

    是想要变成 1000个 dd,最后也只有100个 d

      

     我们查看字段长度

    select datalength(isnull(id,1)),
    datalength(isnull(str ,replicate('a',1000))),
    datalength(isnull(str1,replicate('dd',1000)))
    from test1

       

     查看字符个数:发现确实是截断了,只有100个字符;

        

    【2.2】isnull(参数1,参数2),参数2与参数1数据类型必须相同

    (1)参数2 是  参数1 的可强转类型

    select isnull(id,'1'),isnull(str,'b'),isnull(str,'c') from test1

      

    如上图,就是因为 '1' 可以强行转换为数字1;

    (2)参数2 是  参数1 的非可强转类型

      

     如上图,本是 int 类型的 id 字段,isnull 变成 'a' 字符串,这是不行的,而且 'a' 无法强转成数字类型;

    【3】解决方案(避免被截断)

    其实就是把参数1的数据类型 变得更大,可以完全包含参数2 中的数据,这样就不会被截断

    (1)转成固定类型

      

     (2)转成变成类型

      

  • 相关阅读:
    在R语言中轻松创建关联网络
    在R语言中显示美丽的数据摘要summary统计信息
    R语言中不同类型的聚类方法比较
    R语言中的划分聚类模型
    R语言解释生存分析中危险率和风险率的变化
    Stata估算观测数据的风险比
    Stata 中Mata的st_view函数
    R语言多臂试验
    R语言使用倾向评分提高RCT(随机对照试验)的效率
    R语言在RCT中调整基线时对错误指定的稳健性
  • 原文地址:https://www.cnblogs.com/gered/p/14689602.html
Copyright © 2011-2022 走看看