【发布时间】:2023-01-09 23:07:37
【问题描述】:
我的表中有一列 workId,其值如下:
W1/2009/12345, G2/2018/2345
现在一个用户想要得到这个特定的 id G2/2018/2345。我在查询中使用 like 运算符,如下所示:
select * from u_table as s where s.workId like '%2345%' 。
它给了我上面提到的两个 workids。我尝试了以下查询:
select * from u_table as s where s.workId like '%2345%' and s.workId not like '_2345'
这个查询也给了我同样的结果。
如果有人请向我提供正确的查询。谢谢!
【问题讨论】:
-
为什么不是
WHERE workid = 'G2/2018/2345'?你为什么使用LIKE? -
如果你的专栏
workid看起来是非规范化的,你实际上应该有3个列,而不是 1。如果你修复你的设计,你可能会更容易。也许/希望你真的做分别存储 3 个值,workID是一个计算列(和PERSISTED)?然后你可以只查询代表第三个值的列:WHERE Part3Value = 2345(可能需要用单引号引起来)。 -
如果您使用的是 SQL Server 2012(不支持
STRING_SPLIT())并且Id是文本的最后一部分,WHERE s.workId + '/' LIKE '%/2345/%'可能会有所帮助。 -
或者至少会持续到 2345 年,@Zhorov。 ;)
-
在提问时,您需要提供 minimal reproducible example: (1) DDL 和示例数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 您需要做什么,即逻辑和您的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面 #1 中的示例数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。
标签: sql-server sql-server-2012 substring