当前位置: 首页 > 知识库问答 >
问题:

用于sysdate比较的Varchar2

关昊天
2023-03-14

我正在查询的表的日期存储为varchar2。我需要在sysdate-1和sysdate-30之间使用比较存储为varchar2和sysdate的日期(以返回上个月的varchar2日期)。

当指定to_date(varchar2,'dd-mon-yyyy')时,我得到错误“literal不匹配格式字符串”。

Oracle文档说这是to_date()从varchar2转换时可以接受的格式,这让我感到困惑。

更新:这是一个公司数据库,我没有设计数据库,只能使用我现有的。数据集是巨大的,由SCADA设备自动更新,每天超过10,000个设备。

SELECT device_name, read_date, sysdate

FROM oracle_database

------- Data Returned by query --------

device_name read_date   sysdate
Device 1    5/14/2013   22-Sep-14
Device 2    5/14/2013   22-Sep-14
Device 3    5/14/2013   22-Sep-14
Device 4    5/14/2013   22-Sep-14
Device 5    5/14/2013   22-Sep-14
Device 6    5/14/2013   22-Sep-14
Device 7    5/14/2013   22-Sep-14

使用TO_DATE的结果

ORA-01861:文字与格式字符串不匹配


共有1个答案

邴越彬
2023-03-14

根据您的数据,正确的格式很可能是mm/dd/yyyy。它将匹配单位数和两位数的月或天。

  • mm:月份从01到12(前导0默认情况下不是强制性的)
  • \:任何标点符号
  • dd:日期从01到31(前导0默认情况下不是强制性的)
  • \:任何标点符号
  • yyyy:年

有关详细信息,请参阅Oracle关于datetime格式模型的文档。

-- Some test data
WITH testdata AS (
  SELECT '5/14/2013' as d FROM DUAL
  UNION SELECT '05/14/2013' FROM DUAL
  UNION SELECT '5/1/2013' FROM DUAL
  UNION SELECT '5/01/2013' FROM DUAL
  UNION SELECT '6-6-2013' FROM DUAL)

-- Actual query demonstrating the use of the MM/DD/YYYY format
select d, TO_DATE(d,'MM/DD/YYYY') FROM testdata
D           TO_DATE(D,'MM/DD/YYYY')
05/14/2013  05/14/2013
5/01/2013   05/01/2013
5/1/2013    05/01/2013
5/14/2013   05/14/2013
6-6-2013    06/06/2013
  • fx标志强制严格比较标点符号和格式
  • 中的位数
  • fm标志放松比较,允许最多指定位数
 类似资料:
  • 嗨,我是贾维斯的新手。 我有一个实体,我正在为它实现一个自定义比较器,以便使用Javers进行比较。 我的实体:- 包装com.devyansh.entity; 进口java.util.清单; 导入组织。贾维斯。果心元模型。注释。实体 下面我注册了新的比较器:- 我的比较器实现:- 问题领域:- 每当我尝试使用以下行进行比较时:- Diff Diff=标枪。比较(new Ent(“aaa”,new

  • 问题内容: 因此,我正在研究比较器问题,但无法弄清楚为什么在第一堂课中给我以下错误: 数组类型中的方法sort(T [],Comparator)不适用于参数(ArrayList,CalorieComparator) 餐厅等级: CalorieComparator类: 问题答案: An 与Java数组不同;由于您使用的是列表,因此对您无济于事。 考虑代替。

  • 问题内容: 如果我正在从文本中扫描 //我想将行中的下一个char与 // 像这样: 我知道那不存在,但是在这种情况下可以使用任何类似的东西吗? 问题答案: 您的代码将类似于… 请注意,在调用之后,实际上已获取了该值,因此,如果您想进一步使用它,最好保留该变量,例如:

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和

  • 问题内容: 我对GUI设计和开发领域还很陌生。我确实有一些经验,但是与Visual Basic有关。 我想在Linux上基于命令行应用程序开发一个相当全面的(尽管不是最先进的)GUI应用程序。我有。已经做了一些谷歌上搜索,我发现主要有三种 好 (也许这就是我的感觉)的方式来实现这一目标: GLADE设计的GTK +库 Qt库,以Qtdesigner为设计师 Java与Netbeans合作 为了解决

  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜