所以我正在编辑一些SQL代码,并且我刚刚开始学习它。我正在尝试修复一个update查询,以便它用相应的数据库值更新表的value5列。数据库中的值类型是数字,我希望将其转换为日期和地点,并将其放入我的表中。数据库编号是yyyymmdd格式,所以我一直在尝试使用datefrompart(),但这不起作用。有谁有什么想法吗?
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 = dB.value5“来代替(它运行得很好),并且我在测试转换SQL代码(datefrompart())时遇到了另一个问题。因为我要将数字转换为时间/日期,所以我必须进入目标表的设计视图,并将value5列的输入数据类型从数字更改为时间/日期。当我使用转换SQL代码运行查询时,查询会暂停一段时间,并且不会更新任何值,只留下一个空白的value5列。如果我现在想填充原始的数字值,可以将SQL代码改回原来的"SET tbl.value5 = dB.value5",将输入数据类型从time/date改为numbers,然后重新运行程序。查询停止,并且不更新任何值,并且我再次得到空列,即使在修改SQL和表输入数据类型之前,相同的代码给我留下了正确的更新值。我有VBA的背景,我真的很困惑这是如何工作的。任何建议都将不胜感激,谢谢!
发布于 2017-07-20 01:56:16
你有没有尝试使用substring呢?
SELECT DATEFROMPARTS ( left('20101231',4), substring('20101231',5,2), right('20101231',2) ) AS Result; 发布于 2017-07-20 03:35:49
MS Access (和MS Jet )没有DateFromParts功能。改用DateSerial。
SET tbl.value5 = DateSerial(Left(dB.value5, 4), Mid(dB.value5, 5, 2), Right(dB.value5, 2))发布于 2017-07-20 18:17:42
不清楚您使用的是T-SQL还是Access SQL。在Access中,您可以使用格式
SET tbl.value5 = CDate(Format(dB.value5, "@@@@\/@@\/@@"))在T-SQL中,您可以使用类似的方法。
https://stackoverflow.com/questions/45197349
复制相似问题