gpt4 book ai didi

sql-server - patindex 和 unicode 字符 '-' 的问题

转载 作者:行者123 更新时间:2023-12-03 13:20:28 27 4
gpt4 key购买 nike

我有一个名为 Dats 的字符串,它是一般外观 xxxx-nnnnn 之一(其中 x 是一个字符, >n 是一个数字)或nnn-nnnnnn

我只想返回数字。

为此我尝试过:

SELECT Distinct dats, 
Left(SubString(artikelnr, PatIndex('%[0-9.-]%', artikelnr), 8000), PatIndex('%[^0-9.-]%', SubString(artikelnr, PatIndex('%[0-9.-]%', artikelnr), 8000) + 'X')-1)
FROM ThatDatabase

几乎就是我想要的。它会删除常规字符 x,但不会删除 unicode 字符 -。我怎样才能删除这个呢?而且,每行都有两个 PatIndex 函数似乎效率很低,有没有办法避免这种情况? (这将用于大型数据库,其中该查询的结果将用作键)。

编辑:更新为新数据库有时包含额外的 -. 以及 -

DECLARE @T as table
(
dats nvarchar(10)
)

INSERT INTO @T VALUES
('111BWA30'),
('115-200-11')
('115-22.4-1')
('10.000.22')
('600F-FFF200')

最佳答案

我不确定您是否也需要 - 字符之前的数字,但如果您需要,这里有一种方法:

创建并填充示例表(在您以后的问题中保存此步骤)

DECLARE @T as table
(
dats nvarchar(10)
)

INSERT INTO @T VALUES
('abcde-1234'),
('23-343')

查询:

SELECT  dats,
case when patindex('%[^0-9]-[0-9]%', dats) > 0 then
right(dats, len(dats) - patindex('%-[0-9]%', dats))
else
stuff(dats, charindex('-', dats), 1, '')
end As NumbersOnly
FROM @T

结果:

dats        NumbersOnly
abcde-1234 1234
23-343 23343

如果您只想要 - 字符右侧的数字,则更简单:

SELECT  dats,
right(dats, len(dats) - patindex('%-[0-9]%', dats)) As RightNumbersOnly
FROM @T

结果:

dats        RightNumbersOnly
abcde-1234 1234
23-343 343

关于sql-server - patindex 和 unicode 字符 '-' 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222026/

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