SQL 创建子字符串以将最小和最大日期显示为由分隔符分隔的日期范围

问题描述 投票:0回答:1

我已经得到这个查询(从详细查询简化)以返回日期作为子字符串。如果超过 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
时的最小值和最大值。那行不通。我没有更多的想法了。

谢谢

sql sql-server substring
1个回答
0
投票

由于您只对最小和最大日期感兴趣,因此可以将

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
格式的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.