访问SQL日期函数

时间:2017-07-19 17:31:33

标签: sql ms-access

所以我正在编辑一些SQL代码,而我刚刚开始学习它。我尝试修复更新查询,以便使用相应的数据库值更新表的value5列。数据库中的值类型是一个数字,我想将其转换为日期并放入我的表中。数据库编号采用yyyymmdd格式,因此我一直在尝试使用不起作用的datefromparts()。有人有什么想法吗?

UPDATE tbl INNER JOIN dB ON 
(dB.value1= tbl.value1 OR 
dB.value2 =tbl.value2 ) AND 
(LEFT(dB.value3 ,5)=tbl.value3 ) AND 
(dB.value4 =tbl.value4 ) 
SET tbl.value5 = DateFromParts(Left(dB.value5,4),Mid(dB.value5,5,2),Right(dB.value5,2))
WHERE tblInvoice.value5 IS NULL;

当前程序使用代码     " SET tbl.value5 = dB.value5" 相反(它运行完全正常)我在测试转换SQL代码(datefromparts())时遇到了另一个问题。因为我正在从数字转换为时间/日期,所以我必须进入目标表的设计视图,并将value5列的输入数据类型从数字更改为时间/日期。当我使用转换SQL代码运行查询时,查询暂停一点,没有值得到更新,只留下一个空白的value5列。如果我现在要填写原始数字值,我将SQL代码更改回其原始" SET tbl.value5 = dB.value5",将输入数据类型从时间/日期更改为数字,并且重新运行该程序。查询停止并且没有更新值,并且我再次留下空白列,即使相同的代码在修改SQL和表输入数据类型之前给我留下了更正的更新值。我来自VBA背景,我真的很困惑这是如何工作的。任何提示将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:0)

您是否尝试使用子字符串?

SELECT DATEFROMPARTS ( left('20101231',4), substring('20101231',5,2), right('20101231',2) ) AS Result;  

答案 1 :(得分:0)

MS Access(以及MS Jet)也没有DateFromParts功能。改为使用DateSerial。

SET tbl.value5 = DateSerial(Left(dB.value5, 4), Mid(dB.value5, 5, 2), Right(dB.value5, 2))

答案 2 :(得分:0)

目前尚不清楚您是否使用T-SQL或Access SQL。在Access中,您可以使用格式

SET tbl.value5 = CDate(Format(dB.value5, "@@@@\/@@\/@@"))

在T-SQL中,您可以使用类似的方法。