使用T-SQL从字符串中移除星期名称
在T-SQL中移除日期字符串的星期名称并转换为日期类型
针对你的需求,这里有几种实用的方法来处理带星期的日期字符串,之后就能轻松进行日期比较了:
方法1:直接转换(无需手动移除星期)
其实SQL Server的CONVERT函数支持识别带星期前缀的日期格式,你可以直接指定对应的格式代码来完成转换,省去手动截取的步骤:
DECLARE @InputDateStr VARCHAR(50) = 'Thursday, September 13, 2018'; -- 使用格式代码109,它会自动忽略开头的星期部分 DECLARE @ConvertedDate DATE = CONVERT(DATE, @InputDateStr, 109); -- 现在可以直接进行日期比较 IF @ConvertedDate < '2018-09-15' PRINT '目标日期早于2018-09-15'; ELSE PRINT '目标日期晚于或等于2018-09-15';
格式代码109对应的是mon dd yyyy hh:mi:ss:mmmAM(或PM)的格式,但SQL Server会智能跳过开头不匹配的星期文本,只要后面的日期部分符合格式要求就行。
方法2:手动截取移除星期部分
如果你更倾向于先明确移除星期名称,再转换日期,可以通过CHARINDEX找到第一个逗号的位置,然后截取后面的子串:
DECLARE @InputDateStr VARCHAR(50) = 'Thursday, September 13, 2018'; -- 找到第一个逗号的索引位置 DECLARE @CommaPosition INT = CHARINDEX(',', @InputDateStr); -- 截取逗号后的部分,并去除开头的空格 DECLARE @DateOnlyStr VARCHAR(50) = LTRIM(SUBSTRING(@InputDateStr, @CommaPosition + 1, LEN(@InputDateStr))); -- 转换为日期类型 DECLARE @ConvertedDate DATE = CONVERT(DATE, @DateOnlyStr); -- 日期比较示例 SELECT CASE WHEN @ConvertedDate = '2018-09-13' THEN '日期匹配' ELSE '日期不匹配' END AS ComparisonResult;
或者用STUFF函数简化截取操作,效果完全一致:
DECLARE @InputDateStr VARCHAR(50) = 'Thursday, September 13, 2018'; DECLARE @DateOnlyStr VARCHAR(50) = LTRIM(STUFF(@InputDateStr, 1, CHARINDEX(',', @InputDateStr), '')); DECLARE @ConvertedDate DATE = CONVERT(DATE, @DateOnlyStr);
不管用哪种方法,转换后的DATE类型就可以直接使用常规的比较运算符(<、>、=、<=、>=)来进行日期对比了,非常方便。
内容的提问来源于stack exchange,提问作者Libtech
相关产品推荐
相关产品推荐

