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

hour must be between 1 and 12 - sql error or ORA-01830: date format picture ends before converting entire input string

我有一列时间戳以 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)

这里是a demo on db<>fiddle.


using random number generator so that it will be unique for every row.

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