gpt4 book ai didi

sql-server - CASE(包含)而不是 equal 语句

转载 作者:行者123 更新时间:2023-12-02 06:09:16 25 4
gpt4 key购买 nike

是否有一种方法可以在 case 语句中使用 contains 而不是 equal ?

例如,我正在检查数据库表是否有一个条目

lactulose, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline, 

我可以使用吗

CASE When dbo.Table.Column = 'lactulose' Then 'BP Medication' ELSE '' END AS 'BP Medication'

这不起作用。

最佳答案

CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%' 
THEN 'BP Medication' ELSE '' END AS [BP Medication]

添加前导 ', ' 和尾随 ',' 以便您可以处理匹配,无论它位于字符串中的位置(第一个条目、最后一个条目) ,或两者之间的任何位置)。

也就是说,为什么要将要搜索的数据存储为逗号分隔的字符串?这违反了各种形式和最佳实践。您应该考虑标准化您的架构。

另外:不要使用'单引号'作为标识符分隔符;此语法已弃用。如果必须的话,请使用[方括号](首选)或“双引号”。请参阅此处的“字符串文字作为列别名”:http://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx

编辑如果您有多个值,则可以执行此操作(您不能使用其他 CASE 语法变体或使用类似 IN()):

CASE 
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]

如果您有更多值,可能值得使用 split 函数,例如

USE tempdb;
GO

CREATE FUNCTION dbo.SplitStrings(@List NVARCHAR(MAX))
RETURNS TABLE
AS
RETURN ( SELECT DISTINCT Item FROM
( SELECT Item = x.i.value('(./text())[1]', 'nvarchar(max)')
FROM ( SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List,',', '</i><i>') + '</i>').query('.')
) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
WHERE Item IS NOT NULL
);
GO

CREATE TABLE dbo.[Table](ID INT, [Column] VARCHAR(255));
GO

INSERT dbo.[Table] VALUES
(1,'lactulose, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline,'),
(2,'lactulite, Lasix (furosemide), lactulose, propranolol, rabeprazole, sertraline,'),
(3,'lactulite, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline,'),
(4,'lactulite, Lasix (furosemide), lactulose, amlodipine, rabeprazole, sertraline,');

SELECT t.ID
FROM dbo.[Table] AS t
INNER JOIN dbo.SplitStrings('lactulose,amlodipine') AS s
ON ', ' + t.[Column] + ',' LIKE '%, ' + s.Item + ',%'
GROUP BY t.ID;
GO

结果:

ID
----
1
2
4

关于sql-server - CASE(包含)而不是 equal 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610412/

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