我有两个TABLES
SOURCE_TABLE
TARGET_TABLE
我想更新旧记录并将新记录插入TARGET_TABLE
的{{1}}中,并且我使用SOURCE_TABLE
进行此操作。
注意:我在MERGE
中有一个nvarchar
数据类型的日期值,在SOURCE_TABLE
中有一个datatime2
数据类型的日期值。
现在如何解决此错误:
从字符串转换日期和/或时间时转换失败
这是我的代码:
TARGET_TABLE
答案 0 :(得分:0)
为什么要将日期/时间存储为字符串?这是错误的格式。
您可以使用# 0 changes to 1 when players are joining the game
speler_een = 0
speler_twee = 0
speler_drie = 0
speler_vier = 0
# This function makes an inventory of how many players are involved
class HoeveelSpelers:
def verkrijg_aantal_spelers(spelers_totaal):
hoeveelSpelers = int(input('Hoeveel spelers spelen er mee? (1-4) '))
while (hoeveelSpelers > 4 or hoeveelSpelers < 1):
print('Dit is niet een geldige hoeveelheid spelers. Probeer het
opnieuw. ')
hoeveelSpelers = int(input('Hoeveel spelers spelen er mee? (1-4)
'))
return hoeveelSpelers
h = HoeveelSpelers()
spelers_totaal = h.verkrijg_aantal_spelers()
if (spelers_totaal == 4):
speler_een = 1
speler_twee = 1
speler_drie = 1
speler_vier = 1
elif (spelers_totaal == 3):
speler_een = 1
speler_twee = 1
speler_drie = 1
elif (spelers_totaal == 2):
speler_een = 1
speler_twee = 1
elif (spelers_totaal == 1):
speler_een = 1
print(speler_een, speler_twee, speler_drie, speler_vier)
main()
进行转换:
try_convert()
但是,当它们不匹配时,它将返回VALUES (source.Name, source.Family, source.Priority,
TRY_CONVERT(DATETIME, source.CreationDate, 101)
)
。
您可能还会发现省略格式会给您带来更好的运气:
NULL
SQL Server在将字符串转换为日期/时间方面非常复杂。
更重要的是,您应该查找失败的数据并修复数据-最好将列更改为正确的类型:
VALUES (source.Name, source.Family, source.Priority,
TRY_CONVERT(DATETIME, source.CreationDate)
)
答案 1 :(得分:-1)
-首先,我需要知道为什么将date列定义为nvarchar?
将列数据转换为datatime2不会得到错误。
-用于实例:
select convert(datetime2,convert(nvarchar(250),getdate()))
select convert(datetime2,getdate())
-只需替换下面的代码即可
convert(datetime2,source.CreationDate)
希望有帮助