SQL 即使函数返回正确的值,查询也会返回格式不正确的数据

SQL Query returning incorrectly formatted data even though the function is returning the correct values

我的 table 中的数据代表具有以下数据的物理位置:自治市名称、州(province/region)和由前缀和后缀分隔的唯一 ID破折号(所有 NVARCHAR)。

Name State UniqueID
Atlanta Georgia A12-1383

UniqueID 中的破折号并不总是位于同一位置(可以是 A1-XYZ、A1111-XYZ 等)。后缀始终是数字。

我的方法是结合使用 RIGHTCHARINDEX 来首先找到破折​​号的索引,然后隔离破折号右侧的后缀,然后应用 MAX 到结果。到目前为止,我的问题是这种组合有时会返回 -123412-1234 之类的东西,即包括破折号和偶尔的一些前缀。正因为如此,max显然应用不正确。

到目前为止,这是我的查询:

select name, max(right(uniqueid,(Charindex('-',uniqueid)))) as 'Max'
from locations
where state = 'GA' and uniqueid is not NULL
group by name
order by name ASC

这是格式错误的行的结果:

Name Max
Atlanta 11-2442
Savannah -22

这会为 'Max' 返回格式不正确的数据,因此我隔离了这些函数。

CHARINDEX 正确返回破折号的位置,包括函数返回格式错误的数据的情况。由于破折号从不在同一个地方,我无法隔离 RIGHT 函数以查看是否是问题所在。

我是否错误地使用了这些功能?还是我的方法完全不正确?

谢谢!

CHARINDEX 正在计算 - 之前的字符数,即 左侧 上的字符数,因此使用 RIGHT 左边 的字符数不起作用。您需要找出 右边 上有多少个字符,这可以通过 LEN() 得到总长度减去左边的字符数。

SELECT RIGHT(MyColumn,LEN(MyColumn)-CHARINDEX('-',MyColumn))
FROM (
    VALUES
    ('A12ssss-1383'),
    ('A12-13834'),
    ('A12ss-138')
) X (MyColumn);