ent*_*erd 2 sql oracle date-formatting
我有一个Oracle DB,我不控制日期格式.我想知道日期格式是什么,以确保搜索像
select * from search where search_date>='03/16/2016 00:00:00'
Run Code Online (Sandbox Code Playgroud)
按预期工作.
a_h*_*ame 12
不要这样做 - 你依赖隐式数据类型转换,这种转换在某些时候会失败.
您有两种选择:
1)使用适当的ANSI SQL日期文字:
select *
from search
where search_date >= timestamp '2016-03-16 00:00:00';
Run Code Online (Sandbox Code Playgroud)
2)使用to_date()(或to_timestamp())并使用自定义格式.
select *
from search
where search_date >= to_date('03/16/2016 00:00:00', 'mm/dd/yyyy hh24:mi:ss');
Run Code Online (Sandbox Code Playgroud)
有了to_date()你应该避免任何格式依赖于语言.使用月份的数字,而不是缩写(例如'Mar'或'Apr'),因为它们再次依赖客户端语言.
更多细节可以在手册中找到:https:
//docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF51062
永远不要依赖隐式数据类型转换.
您可以通过NLS查询获取所有会话参数:
SELECT * FROM NLS_SESSION_PARAMETERS;
Run Code Online (Sandbox Code Playgroud)
或者,如果您有权限GRANT SELECT ON V_$PARAMETER TO YOUR_USERNAME;,则可以使用以下命令:
SHOW PARAMETER NLS;
Run Code Online (Sandbox Code Playgroud)
如果您只想要日期格式,那么您可以执行以下任一操作:
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';
Run Code Online (Sandbox Code Playgroud)
或者
SHOW PARAMETER NLS_DATE_FORMAT;
Run Code Online (Sandbox Code Playgroud)
但是,您也可以使用与格式无关的 ANSI 日期(或时间戳)文字。ANSI 日期文字具有格式DATE 'YYYY-MM-DD',时间戳文字具有格式TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF9'。所以你的查询是:
select * from search where search_date>= DATE '2016-03-16'
Run Code Online (Sandbox Code Playgroud)
或者
select * from search where search_date>= TIMESTAMP '2016-03-16 00:00:00'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18003 次 |
| 最近记录: |