我已经得到这个查询(从详细查询简化)以返回日期作为子字符串。如果超过 1 个日期,我想返回一个仅包含日期的最小值和最大值的子字符串,否则仅返回一个日期。
这是我的 SQL 查询:
SELECT
SUBSTRING((SELECT distinct ','+ r.ENTRY AS [text()]
FROM RESULT r
WHERE r.ENTRY IN ('19-09-2023', '20-09-2023', '21-09-2023', '22-09-2023')
AND r.sample_number = 74406
FOR XML PATH (''), TYPE ).value('text()[1]', 'nvarchar(max)'), 2, 1000) [Test Date]
此查询返回:
19-09-2023,20-09-2023,21-09-2023,22-09-2023
但是,我只想返回
19/09-22/09/2023
,即上述格式的最小到最大日期。如果只有一个日期,那么我只想返回该日期。
如何修改查询以获得此结果?我确实需要它作为子字符串,因为这只是返回的许多其他列之一。
我尝试添加一个
CASE
表达式来获取超过 1 个 r.ENTRY
时的最小值和最大值。那行不通。我没有更多的想法了。
谢谢
由于您只对最小和最大日期感兴趣,因此可以将
MIN()
和 MAX()
与 CASE
表达式一起使用。不需要字符串聚合
select case when min(ENTRY) <> max(ENTRY)
then convert(varchar(10), min(ENTRY), 105)
+ '-'
+ convert(varchar(10), max(ENTRY), 105)
else convert(varchar(10), min(ENTRY), 105)
end
from RESULT r
CONVERT()
样式为 105
将返回 dd-mm-yyyy
格式的字符串。