我有一个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,
非常感谢任何帮助。
答案 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