oracle - 小时必须在 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 之间
如果我将查询更改为以下格式 - 用于更新时间的查询
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)
使用随机数生成器,以便每一行都是唯一的。
不保证。随机序列仍然可以包含重复的数字。但是,如果您每秒只有几个时间戳,那么您不太可能会遇到任何冲突。冲突的可能性随着每秒时间戳的数量而增加。因此,如果唯一性是练习的对象,那么这是错误的方法。您需要一个不同的密钥来唯一标识您的记录(可能是一个技术密钥,例如序列或标识列)。
推荐阅读
- php - 在 PHP 中导入 CSV 验证
- spring - 一起使用 Spring `@Scheduled` 和 `@Async` 的设计注意事项
- javascript - 传递联合类型的道具以反应需要联合中的一种类型的子组件
- javascript - Javascript - 在对象中动态创建数组并推送到它
- swift - 如何对我的 TODO 进行分类?
- vuejs2 - 如何在 vue js 和 laravel api 中使用删除方法
- sql - 我对数据时间有什么用?
- android - React Native 错误:多个 dex 文件在生成生产 apk 时定义 Lcom/facebook/binaryresource/BinaryResource
- ruby - '&:' 与 'is_a(Integer)' 一起使用
- javascript - Bookshelf.js 获取具有相关(连接)表的行 - 限制相关行的数量