【问题标题】:How to trim leading single quote and leading zeros from sql query如何从 sql 查询中修剪前导单引号和前导零
【发布时间】:2011-11-29 19:12:34
【问题描述】:

我需要比较 sql 表中的两列。一列中的数据具有前导单引号并且可能具有前导零,而另一列中的数据可能具有前导零。在进行比较之前,我需要修剪一列的前导零以及另一列的前导引号和前导零。这可能吗?

    F.RoutingNum
    123456
    234356
    014233
    233455


    T.RoutingNum
    '123456
    '234356
    '014233
    '0233455

我试过了,但它没有修剪到 T.RoutingNum 列的前导零。

CASE 
    WHEN Replace(Ltrim(Replace(F.RoutingNum, '0', ' ')), ' ', '0') 
        <> SUBSTRING(Replace(Ltrim(Replace(T.RoutingNum, '0', ' ')), ' ', '0'), 2, 20) 
        THEN 'DO not match' 
    ELSE 'match'
END

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    这是一篇关于如何根据您的数据类型删除前导零的好文章:
    http://www.sql-server-helper.com/functions/trim-leading-zeros.aspx

    如果您的 RoutingNum 实际上是数字,则只需将其转换为 INT

    这是一个相关问题,它可能也回答了您的问题:
    Removing leading zeroes from a field in a SQL statement

    编辑:而且,我刚刚确认使用这种方法很容易确定这些相同的结果:
    http://bit.ly/vQYVal

    【讨论】:

    • +1 - 我正要建议削减报价并将其转换为 INT
    【解决方案2】:
    case
        when cast(isnull(f.routingnum, 0) as bigint) 
            <> cast(isnull(replace(t.routingnum, '''', ''), 0) as bigint)
            then 'do not match'
        else
            'match'
    end
    

    【讨论】:

    • 我收到此错误,nvarchar 值 '3114970664' 的转换溢出了一个 int 列。有没有解决的办法?谢谢
    • @user973671 使用bigintdecimal。您将看到的最大价值是多少??
    • cast(F.RoutingNum as decimal) 有效,但 cast(replace(T.RoutingNum, '''', '') as decimal) 给出错误,将数据类型 nvarchar 转换为数字时出错。我猜单引号在它被转换之前没有被删除。有什么建议么?谢谢
    • @user973671 查看我的编辑。尝试使用bigint。此外,使用decimal,指定精度和比例。 IE。 cast(replace(t.routingnum, '''', '') as decimal(20, 0) 或类似的东西。确保您的 replace 仅使用单引号。第二个参数是4个单引号,第三个参数是2个单引号。
    • T.RoutingNum 列中还有一些空值,也许这就是它给我这个错误的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2011-10-06
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多