date——sql查询

场景:在数据库中要删除一条记录,但是该记录的唯一性只能通过插入数据库的系统时间来确定,字段为date类型,格式是:2016/10/19 17:17:29。

1 解决

在百度上找到的方法是使用to_char()函数,将date字段转换为字符进行查询。

delete from trndetail where transno=10010617 and to_char(sysdtime,'yyyy/mm/dd hh24:mi:ss')='2016/10/19 17:17:29';

2 补充

2.1 转换函数

 与date操作关系最大的就是两个转换函数:to_date(),to_char() 
to_date() 作用将字符类型按一定格式转化为日期类型: 
具体用法:

to_date('2004-11-27','yyyy-mm-dd')

 

前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。 
如;to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 将得到具体的时间 

多种日期格式: 

YYYY:四位表示的年份 
YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪 
MM:01~12的月份编号 
MONTH:九个字符表示的月份,右边用空格填补 
MON:三位字符的月份缩写 
WW:一年中的星期 
D:星期中的第几天 
DD:月份中的第几天 
DDD:年所中的第几天 
DAY:九个字符表示的天的全称,右边用空格补齐 
HH,HH12:一天中的第几个小时,12进制表示法 
HH24:一天中的第几个小时,取值为00~23 
MI:一小时中的分钟 
SS:一分钟中的秒 
SSSS:从午夜开始过去的秒数 

 


to_char():将日期转按一定格式换成字符类型 ——(这里在进行条件查询时候使用到了)

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual; 

TIME 
------------------- 
2004-10-08 15:22:58 


即把当前时间按yyyy-mm-dd hh24:mi:ss格式转换成字符类型 

在oracle中处理日期大全 

TO_DATE格式 
Day: 
dd number 12 
dy abbreviated fri 
day spelled out friday 
ddspth spelled out, ordinal twelfth 
Month: 
mm number 03 
mon abbreviated mar 
month spelled out march 
Year: 
yy two digits 98 
yyyy four digits 1998 

24小时格式下时间范围为: 0:00:00 - 23:59:59.... 
12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 

### 将 SQL 中的字符串类型转换为日期时间类型进行查询SQL 查询中,将字符串类型转换为日期时间类型是一项常见需求。不同的数据库管理系统(DBMS)提供了各自的函数来完成这一任务。以下是针对主流 DBMS 的解决方案。 #### 1. **MySQL** 在 MySQL 中,可以使用 `STR_TO_DATE()` 函数将字符串转换为日期时间格式[^3]。该函数的第一个参数是要转换的字符串,第二个参数是指定输入字符串的时间格式模板。 ```sql SELECT STR_TO_DATE('2023-10-05', '%Y-%m-%d') AS date_value; ``` 如果目标列存储的是带有时间戳的字符串,则可以扩展模板以匹配完整的日期时间模式: ```sql SELECT STR_TO_DATE('2023-10-05 14:30:00', '%Y-%m-%d %H:%i:%s') AS datetime_value; ``` #### 2. **PostgreSQL** PostgreSQL 提供了更直观的方法——通过强制类型转换或将字符串解析为目标数据类型。可以直接使用 `::timestamp` 或者 `CAST()` 函数来进行转换[^4]。 ```sql SELECT '2023-10-05'::date AS date_value; SELECT CAST('2023-10-05 14:30:00' AS timestamp) AS datetime_value; ``` #### 3. **SQL Server** 在 SQL Server 中,推荐使用 `CONVERT()` 或 `TRY_CONVERT()` 函数处理字符串到日期时间类型的转换。后者能够更好地应对无效日期的情况而不抛出错误[^5]。 ```sql SELECT CONVERT(DATETIME, '2023-10-05 14:30:00', 120) AS datetime_value; SELECT TRY_CONVERT(DATETIME, 'invalid-date-string') AS safe_conversion_result; ``` #### 4. **Oracle Database** 对于 Oracle 数据库而言,应采用 `TO_DATE()` 或 `TO_TIMESTAMP()` 函数依据指定格式模型执行转换操作[^6]。 ```sql SELECT TO_DATE('2023-10-05', 'YYYY-MM-DD') FROM dual; SELECT TO_TIMESTAMP('2023-10-05 14:30:00', 'YYYY-MM-DD HH24:MI:SS') FROM dual; ``` #### 处理时区问题 当涉及跨时区的操作时,需特别注意设置正确的时区上下文。例如,在 Druid 中可通过调整连接参数 `"sqlTimeZone"` 来改变默认使用的 UTC 时间标准[^7]。而在 PostgreSQL 中则可以通过修改会话级别的配置项达成相同效果: ```sql SET timezone='Asia/Shanghai'; ``` 另外值得注意的一点是,某些旧版系统可能存在无法识别零年份的问题,这通常表现为类似于 `'0000-00-00 00:00:00' cannot be represented as java.sql.Timestamp` 的异常提示[^8]。对此类情况的最佳实践建议是从源头杜绝此类非法值的存在或者提前做好预处理工作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值