首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较T中的日期

比较T中的日期
EN

Stack Overflow用户
提问于 2022-03-08 14:34:33
回答 2查看 153关注 0票数 0

我有一个表,其中有一个数据类型为date的列varchar。这些值是'2022-03-08 07:00',2022-03-08 07:30 ...

在我的存储过程中,我有一个DATE类型的参数,并具有一个值'2022-3-8'

代码语言:javascript
复制
DECLARE @d DATE = '2022-3-8'

SELECT *, r.date AS date, @d AS d 
FROM Readings AS r
WHERE CONVERT(VARCHAR, r.date, 23) = @d

我怎么比较这两件事呢?我知道这个错误:

从字符串转换日期和/或时间时,

转换失败。

我想删除时间组件,并比较'2022-03-08''2022-3-8'。注意月号和日数中的零。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-08 14:56:23

TRY_CASTTRY_CONVERT将将字符串转换为日期,如果不可能,则返回null。

代码语言:javascript
复制
SELECT *, TRY_CAST(r.date AS DATE) as date, @d AS d
FROM Readings r
WHERE TRY_CAST(r.date AS DATE) = @d

示例:

代码语言:javascript
复制
DECLARE @d DATE = '2022-3-8';
WITH Readings AS 
(
    SELECT '2022-03-08 07:00' AS date  
    UNION ALL 
    SELECT '2022-03-08 07:30'
    UNION ALL
    SELECT '2022-03-06 17:30' --will be false
    UNION ALL
    SELECT '2022-02-31 07:30' --invalid string
)
SELECT r.date as OriginalString
, TRY_CAST(r.date AS DATE) as CastDate
, TRY_CONVERT(DATE,r.date,23) as ConvertDate
, @d AS d
, CASE WHEN TRY_CAST(r.date AS DATE) = @d THEN 1 ELSE 0 END AS Matched
FROM Readings r
票数 1
EN

Stack Overflow用户

发布于 2022-03-08 14:58:55

使用right(replicate('0',2)+value,2),使您能够将1 one_digit数字更改为two_digit编号(1=>01)。PARSENAME用于拆分,concat用于连接字符串

代码语言:javascript
复制
DECLARE @d DATE = '2022-3-8'

SELECT Concat(( Parsename(Replace(@d, '-', '.'), 3) )/*year*/, '-', RIGHT(
              Replicate('0', 2) + ( Parsename(Replace(@d, '-', '.'), 2) ), 2)
       /*month*/,
              '-', RIGHT(Replicate('0', 2) + ( Parsename(Replace(@d, '-', '.'),
                                               1) ), 2
                   )/*day*/) as d

或者在查询中

代码语言:javascript
复制
DECLARE @d DATE = '2022-3-8'

SELECT *,
       r.date
       AS date,
       ,@d
FROM   readings AS r
WHERE  CONVERT(VARCHAR, r.date, 23) = 
Concat(( Parsename(Replace(@d, '-', '.'), 3) )/*year*/, '-', RIGHT(
       Replicate('0', 2) + ( Parsename(Replace(@d, '-', '.'), 2) ), 2)/*month*/,
       '-',
       RIGHT(Replicate('0', 2) + ( Parsename(Replace(@d, '-', '.'), 1) ), 2)
       /*day*/)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71396727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档