FireDAC处理delphi下非法日期时间

6 篇文章 0 订阅
3 篇文章 0 订阅

在Delphi下最小日期时间其实是个Double类型,为0时表示:1899-12-30,小于这个时间时为负数

delphi下日期分为year、month、day三个段,必须按照month(1-12),day(1-28\29\30\31,平年二月28天,闰年二月29天,大月31天,小月30天)

如果来一个1093-00-17,在delphi下是不合法的时间,但是MySQL下是合法的,mysql(5.5)所支持的日期时间类型有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。

日期时间类型占用空间日期格式最小值最大值零值表示
 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:009999-12-31 23:59:59 0000-00-00 00:00:00
 TIMESTAMP 4 bytes YYYY-MM-DD HH:MM:SS 197001010800012038 年的某个时刻00000000000000
 DATE 4 bytes YYYY-MM-DD1000-01-01 9999-12-31 0000-00-00
 TIME 3 bytes HH:MM:SS -838:59:59838:59:59 00:00:00
 YEAR 1 bytes YYYY1901 2155 0000

 

因为MySQL中日期的year、month、day字段是可以为0的,所以1093-00-17这样的日期也可以合法保存的,但到了delphi里就麻烦了,EncodeDate(y,m,d)时直接报错了

解决方法:

MySQL下提前将date字段转为字符串:DATE_FORMAT(date_field, '%Y-%m-%d')

SQLServer下提前将date字段转为字符串:CONVERT(VARCHAR(8), date_field, 23)SQLServer日期转换参考

Oracle下提前将date字段转为字符串:TO_CHAR(date_field,'yyyy-mm-dd' )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值