gpt4 book ai didi

sql-server - 在 SQL Server 表中匹配具有可变数量的前导零的字段

转载 作者:太空狗 更新时间:2023-10-30 01:55:15 25 4
gpt4 key购买 nike

我有一种情况,我的传入数据值可能有也可能没有前导零。我需要将其与 SQL Server 表中的字段/行相匹配。 SQL Server 数据库中的字段值也可能有也可能没有前导零。

所以,我可能会:

  • 传入 = 5042800138
    db中的值可以是5042800138、05042800138、005042800138、0005042800138中的任意一个

  • 或者传入的可能是 005042800138
    db中的值可以是5042800138、05042800138、005042800138、0005042800138中的任意一个

我想出的解决方案是(始终)去除传入数据的前导零并使用 SQL,如下例所示:

-- this simulates the incoming value to check
-- i strip out the leading zeroes.
declare @tryUPC as varchar(40)
set @tryUPC = '5042800138'

-- try to find it in the database and ignore leading zeroes
select prod_uid, prod_partno, prod_upc
from products as p
where (prod_upc = @tryUPC) or
(
len(prod_upc) > len(@tryUPC)
and right(prod_upc, len(@tryUPC)) = @tryUPC
and stuff(prod_upc, 1, len(prod_upc) - len(@tryUPC), '0') = prod_upc
)

这似乎可行。我的问题是,我错过了什么吗? SQL Server 有更好的方法来处理这个问题吗?我正在使用 SQL Server 2005。

我,

不要

最佳答案

只是另一个倾向(更正数据是最好的,但接受的答案也是一个不错的解决方法):添加一个持久的索引计算列“actualUPC”,它是一种字符类型,使用正确数量的前导零计算。示例:

如果“真实”代码应该是 12 位数字,则创建一个计算列,如下所示

 right( '000000000000' + originalColumn, 12 )

这样输入数据实际上得到了更正,然后正确地建立了索引,并且可以使用索引进行搜索。

查询时,还要填充输入以匹配,作为查询中的常量。

不过,在变得太疯狂之前,请检查对索引计算列的限制。

像这样的顺便说一句代码(邮政编码、序列号、ssn 等)应始终存储为文本数据,前导零,并且永远不要存储为整数或数字类型。从一个在邮政编码 01033 长大的人那里拿来的。

关于sql-server - 在 SQL Server 表中匹配具有可变数量的前导零的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com