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中也运行良好。因此,问题不在于转换或强制转换