将当前日期添加到SQL查询后跟数字

时间:2015-07-27 11:17:56

标签: sql sql-server date

我有一个SQL查询,它返回前一天的事务,因此每天早上运行查询并将所有事务导出到前一天的文件中。我有一个名为Id的列,此时此处只有0,我想要做的是在此处插入日期和数字,以便形成类似于unique Id的内容文件中的每个事务..例如,第一个事务Id将是27071500001,最后一个事务Id将是27071511234。日期需要是前一天而不是当前日期我怎么能这样做?

这是我选择ID的地方..

SELECT  Id,
            PaidAt    = CASE
                            WHEN NOT(l_pay.ShortName IS NULL) THEN    l_pay.ShortName
                            ELSE ''
                        END,
            DateIn    = CASE
                            WHEN NOT(tr.EntryDate IS NULL) THEN CONVERT(VARCHAR, tr.EntryDate, 112)
                            ELSE ''
                        END,                                  
            TimeIn    = CASE
                            WHEN NOT(tr.EntryTime IS NULL) THEN  REPLACE(tr.EntryTime, ':', '')
                            ELSE ''
                        END,
            DateOut   = CASE
                            WHEN NOT(tr.ExitDate IS NULL) THEN CONVERT(VARCHAR, tr.ExitDate, 112)
                            ELSE ''
                        END,                        
            TimeOut   = CASE
                            WHEN NOT(tr.ExitTime IS NULL) THEN REPLACE(tr.ExitTime, ':', '')
                            ELSE ''
                        END,

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用CONVERT功能获取不同的日期格式,例如

1) CONVERT(VARCHAR(20), GETDATE()-1, 112) /* Returns date like 20150726 */
2) REPLACE(CONVERT(VARCHAR(20), GETDATE()-1, 104),'.','') /* Returns date like 26072015 */
3) REPLACE(CONVERT(VARCHAR(20), GETDATE()-1, 104),'.','') + 
   REPLACE(CONVERT(VARCHAR(20), GETDATE()-1, 108),':','')
/* Returns date and time like 26072015170032*/

<强>更新

为此你必须使用ROW_NUMBER()函数,如下所示:

SELECT REPLACE(CONVERT(VARCHAR(20), GETDATE()-1, 104),'.','') + 
CAST(ROW_NUMBER() OVER(ORDER BY Id) AS VARCHAR(20)) FROM TableName

要在数字中添加前导零,您需要填充字符串,如下所示:

SELECT REPLACE(CONVERT(VARCHAR(20), GETDATE()-1, 104),'.','') + 
RIGHT('00000'+ CAST(ROW_NUMBER() OVER(ORDER BY Id) AS VARCHAR(20)),5) FROM TableName