[英]compare date in sql command
我的数据库将日期保存为此格式5/29/2015 12:07:58.000000 AM
。 我从用户输入的日期为5/29/2015 12:07:58
格式。 我可以只比较日/月/年,而不是sql命令中的整行吗? 我的数据库是oracle,格式为TIMESTAMP。 任何人有任何想法怎么做?
我的数据库将日期保存为此格式5/29/2015 12:07:58.000000 AM
否。 日期/时间戳没有任何格式 。 Oracle不会以您看到的格式存储日期/时间戳。 您看到的格式仅用于显示目的。 日期在内部以Oracle专有格式7字节存储 。
我可以只比较日/月/年,而不是sql命令中的整行吗?
当然可以。 您可以使用TRUNC截断时间部分,只保留日期部分,而数据类型保留为日期。
例如,
SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;
MY_TMSTMP
----------
2015-05-29
我从用户输入的日期为5/29/2015 12:07:58格式。
因此,您将以这种格式将用户输入作为字符串 。 您需要先使用TO_DATE 将其转换为DATE,然后进行比较。
例如,
WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
正如我已经说过的,如果您想忽略时间部分,请应用TRUNC 。
但是,在日期列上应用TRUNC会抑制该列上的任何常规索引 。 从性能角度来看,最好使用Date范围条件 。
例如,
WHERE dt_column
BETWEEN
TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
AND
TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1
我假设您在数据库中的记录和用户输入都是时间戳。 您可以使用TRUNC函数获取此值的日期并使用它进行比较
declare v_tsdate DATE; v_txdate DATE; begin v_tsdate := TRUNC( CAST('5/29/2015 12:07:58.000000 AM' as DATE) ); v_txdate := TRUNC( CAST('5/29/2015 12:07:58' as DATE) ); --do the comparision and conditions you need with v_tsdate and v_txdate end;
之所以将其转换为DATE格式,是因为TRUNCT(Timestamp)
理论上是TRUNC(CAST(Timestamp AS DATE))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.