Sql 将日期时间值转换为mm/dd/yyyy格式时出错
我试图通过使用以下查询片段将Sql 将日期时间值转换为mm/dd/yyyy格式时出错,sql,sql-server,tsql,datetime,Sql,Sql Server,Tsql,Datetime,我试图通过使用以下查询片段将datetime值转换为Date格式,如mm/dd/yyyy,来检索该值 CASE WHEN co.RequestID is not NULL THEN CONVERT(VARCHAR(10), DateFrom, 101) WHEN nis.[867_key] is not NULL THEN CONVERT(VARCHAR(10), nis.ServicePeriodStart, 101) ELSE CON
datetime
值转换为Date
格式,如mm/dd/yyyy
,来检索该值
CASE
WHEN co.RequestID is not NULL
THEN CONVERT(VARCHAR(10), DateFrom, 101)
WHEN nis.[867_key] is not NULL
THEN CONVERT(VARCHAR(10), nis.ServicePeriodStart, 101)
ELSE CONVERT(VARCHAR(10), q2.ServicePeriodStart, 101)
END as READ_START
但出于某种原因,它给了我一些其他格式,比如
yyyymmdd
,这不是我想要的。我甚至试着用VARCHAR(10)
和datetime
替换NVARCHAR(12)
,但效果并不理想。我想我已经正确地进行了转换,我想问题在于在语句的情况下使用Convert
,我认为问题出在column上。因此column是varchar,首先需要将它转换为日期时间
参见示例
DECLARE @Date VARCHAR(10) = '2014-08-06'
SELECT CONVERT(CHAR(20),'2014-08-06',101)
RESULT 2014-08-06
SELECT CONVERT(CHAR(20),CAST('2014-08-06' as DATETIME),101)
RESULT 08/06/2014
你的问题
CASE WHEN co.RequestID is not NULL
THEN CONVERT(varchar(20),CAST(DateFrom AS DATETIME),101)
WHEN nis.[867_key] is not NULL
THEN CONVERT(varchar(12),CAST(nis.ServicePeriodStart AS DATETIME),101)
ELSE CONVERT(varchar(20),CAST(q2.ServicePeriodStart AS DATETIME) ,101)
END as READ_START
这很有效
CASE WHEN
co.RequestID is not NULL
THEN
CONVERT(varchar(2), DATEPART(MONTH, DateFrom))
+'/'+ CONVERT(VARCHAR(2),DATEPART(DAY, DateFrom))
+'/'+CONVERT(VARCHAR(4),DATEPART(YEAR, DateFrom))
WHEN
nis.[867_key] is not NULL
THEN
CONVERT(varchar(2), DATEPART(MONTH, nis.ServicePeriodStart))
+'/'+ CONVERT(VARCHAR(2),DATEPART(DAY,nis.ServicePeriodStart))
+'/'+CONVERT(VARCHAR(4),DATEPART(YEAR, nis.ServicePeriodStart))
ELSE
CONVERT(varchar(2), DATEPART(MONTH, q2.ServicePeriodStart))
+'/'+ CONVERT(VARCHAR(2),DATEPART(DAY,q2.ServicePeriodStart))
+'/'+CONVERT(VARCHAR(4),DATEPART(YEAR, q2.ServicePeriodStart))
END as READ_START
尝试CAST('08/06/2014'作为DateTime2)
而不是DateFrom、ServicePeriodStart和ServicePeriodStart是哪种类型的文件类型?@Parado它们是DateTime类型,代码提供的信息将准确地给出您期望的结果。您应该验证数据类型是否符合预期,显示的代码实际上是返回结果的代码,以及结果是什么。该链中的某些链接不正确。应用任何转换前的确切格式为2013年12月31日12:00:00 AM,转换后显示的DateFrom格式为20131231,语言为美英。根据126处的文档,是ISO8601格式,而不是mm/dd/yyyy。op的参数101是mm/dd/yyyy格式的,因此问题可能不在这里。您是对的,这是一个打字错误,请查找最新的脚本@AndreaColleoni@mohan111.. 这并没有给出mm/dd/yyyy中的日期,但它仍然是yyyymmdit,在小提琴和我的应用程序中的许多其他地方工作得很好,但在用例的上下文中没有。甚至我发布的查询在SQLFIDLE中也运行良好。因此,问题不在于转换或强制转换