2015-10-07 78 views
0

我想在单词后面加上“days”这个单词,但是sql server正在反应它不能被转换。我怎么也不能选择负整数的差异。在select语句中输入一个单词

SELECT PONo, PODeliveryDate, DATEDIFF(DAY, GETDATE(), PODeliveryDate) AS DayDiff 
FROM PurchaseOrder 
where POStatus='Complete' OR POStatus='Partially Completed' OR POStatus='Approved' 
ORDER BY ABS(DATEDIFF(DAY, GETDATE(), PODeliveryDate)) 

它给了我不同的日期,但我不能把它放在它旁边。

我希望它看起来像5几天没仅有5

+3

尝试转换的'DATEDIFF(DAY,GETDATE(),PODeliveryDate)''来作为varchar''CAST(DATEDIFF(DAY,GETDATE(),PODeliveryDate)为varchar)+ '天' 为DayDiff' –

+0

这完美的作品:) – gamered123

+0

@CoderofCode使用VARCHAR没有指定长度是非常糟糕的做法。在诸如过程和函数,表格创建和变量声明中的参数的情况下,这将默认为1的长度。当作为varchar而不指定长度时,长度将默认为30.调试时,需要训练有素的目光告诉哪个是哪个。所以把长度放在。 –

回答

1

试图将int值从DATEDIFF()转换为varchar,并添加你的话

SELECT PONo 
,  PODeliveryDate 
,  CAST(DATEDIFF(DAY, GETDATE(), PODeliveryDate) as varchar(10)) + ' days' AS DayDiff 
FROM PurchaseOrder 
WHERE POStatus='Complete' 
    OR POStatus='Partially Completed' 
    OR POStatus='Approved' 
ORDER BY ABS(DATEDIFF(DAY, GETDATE(), PODeliveryDate)) 
0

你可以尝试类似如下:

select CONVERT(varchar(10), GETDATE()) + ' Days' 

您需要转换或转换为varchar之前的varchar

1

在分析之前,将第一个DATEDIFF(DAY, GETDATE(), PODeliveryDate)转换为VARCHAR

CONVERT(VARCHAR(50), DATEDIFF(DAY, GETDATE(), PODeliveryDate)) + 'days' 
1

在sqlserver 2012中,您可以使用CONCAT

为了获得积极的日子,您可以将getdate作为日期并与WHERE语句中的日期进行比较。那么你不需要通过ABS订购。

WHERE子句通过使用IN而不是OR来更容易阅读和维护,这也使得维护更容易。

SELECT 
    CONCAT(DATEDIFF(DAY, GETDATE(), PODeliveryDate), ' days') AS DayDiff 
FROM 
    PurchaseOrder 
WHERE 
    POStatus in ('Complete','Partially Completed','Approved') 
    AND CAST(GETDATE() as date) <= PODeliveryDate 
ORDER BY 
    PODeliveryDate