小时必须介于 1 和 12 之间 - SQL 错误或 ORA-01830:日期格式图片在转换整个输入字符串之前结束



我有一列时间戳以 20-02-18 03:50:58.347000000 PM 格式存储。这些时间戳存储在多行中,因此我只想使用随机数生成器更新此列中的毫秒数,以便每一行都是唯一的。我尝试使用以下查询来更新时间

UPDATE table 
SET field = TO_TIMESTAMP('18-01-18 02:23:27.265000050 PM'|| ' ' || TO_TIMESTAMP(field, 'HH:MI:SS.FF'),'DD-MM-YY HH:MI:SS.FF')
where objid = XXX;

我收到错误 - ORA-01849:小时必须介于 1 和 12 之间

如果我将查询更改为以下格式 - ow 用于更新时间的查询

UPDATE table 
SET field = TO_TIMESTAMP('18-01-18 02:23:27.265000050 PM'|| ' ' || TO_TIMESTAMP(field, 'hh12:MI:SS.FF'),'DD-MM-YY hh12:MI:SS.FF')
where objid = XXX;

我得到下面的错误 - ORA-01830:转换整个输入字符串之前结束日期格式图片。任何人都可以检查一下吗

不要用日期掩码四处乱瞪。只需使用 INTERVAL 添加毫秒:

update t23
set ts = ts + interval '0.001' second * dbms_random.value(0,999)

这是db<>fiddle上的演示。


使用随机数生成器,以便它对于每一行都是唯一的。

不保证。随机序列仍可以包含重复的数字。但是,如果您每秒只有几个时间戳,则不太可能发生任何冲突。冲突的可能性随着每秒时间戳数的增加而增加。因此,如果唯一性是练习的对象,这是错误的方法。您需要一个不同的密钥来唯一标识您的记录(可能是技术密钥,例如序列或标识列(。

最新更新