所以我正在编辑一些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背景,我真的很困惑这是如何工作的。任何提示将不胜感激,谢谢!
答案 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中,您可以使用类似的方法。