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)转成变成类型

      

  • 相关阅读:
    ubuntu 14.04 下实现浏览器接收UDP视频流
    附加作业:黄金点游戏
    [福大软工] Z班 软件工程实践总结 作业成绩
    [福大软工] Z班——Beta现场答辩反馈
    [福大软工] Z班——个人技术博客评分
    [Gamma阶段]第十次Scrum Meeting
    [Gamma阶段]第九次Scrum Meeting
    [Gamma阶段]第八次Scrum Meeting
    [Gamma阶段]第七次Scrum Meeting
    [Gamma阶段]第六次Scrum Meeting
  • 原文地址:https://www.cnblogs.com/gered/p/14689602.html
Copyright © 2011-2022 走看看