gpt4 book ai didi

sql - 将 varchar 转换为日期

转载 作者:行者123 更新时间:2023-12-05 03:11:34 32 4
gpt4 key购买 nike

我想我已经阅读了关于这个主题的几乎所有帖子,但没有一个能解决我的问题。

首先,我正在使用的数据库将所有日期字段都设置为 varchar 数据类型,这让我抓狂,因为每当我处理任何涉及日期的查询时,我都必须不断地转换或转换。

我目前正在使用的查询应该提取所有具有特定诊断的内科患者列表,但该诊断必须在特定日期之前给出。这就是我得到的。

SELECT DISTINCT
pd.PatientID,
pd.PatientName,
pmh.DateOfOnset
pmh.DiagnosisCode
FROM PatientDemographic pd JOIN PatientMedicalHistory pmh ON pd.PatientID = pmh.PatientID
WHERE pmh.DiagnosisCode = '401.1'
AND CAST(pmh.DateOfOnset as Date) > CAST('12/31/2014' as Date)

我收到一条错误消息,显示 “从字符串转换日期和/或时间时转换失败。” 它告诉我错误发生在第 1 行(SELECT DISTINCT 行)所以这不是很有帮助,我不确定我需要修复什么。

正如我提到的,DateOfOnset 字段具有 varchar 数据类型,我需要找到 2014 年 12 月结束之前的所有日期。我已尝试纠正此错误通过尝试 CAST 语句的不同组合——我什至尝试在 SELECT 语句中的日期字段上进行强制转换,但我仍然遇到相同的错误。

我之前正在处理另一个查询,该查询要求我在特定时间范围内查找所有患者预约,对于该查询,我将 WHERE 子句设置为:

WHERE Cast(VisitDate as Date) BETWEEN CAST('01/01/2014' as Date) AND CAST('12/01/2014' as Date)

...它工作得很好。由于我已经以几乎相同的方式设置了当前查询,所以我不确定为什么会出现转换错误。

最佳答案

你的日期格式有误:

SET DATEFORMAT dmy;
SELECT CAST('12/31/2014' as Date);
--Conversion failed when converting date and/or time from character string.

您可以在执行查询之前将其设置为 mdy

SET DATEFORMAT mdy;
SELECT CAST('12/31/2014' as Date);

LiveDemo

或使用 CONVERT样式 101:

SET DATEFORMAT dmy;
SELECT CONVERT(DATE,'12/31/2014',101)

如果您确实需要将DATE 存储为VARCHAR,至少使用文化独立类型,如ISO-8601 .

SET DATEFORMAT dmy;
SELECT CAST('20140201' as Date);
-- 01.02.2014

SET DATEFORMAT mdy;
SELECT CAST('20140201' as Date)
-- 01.02.2014

关于sql - 将 varchar 转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780056/

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