mysql STR_TO_DATE 时间转换 为null问题

mysq时间转换

1.情况
SELECT STR_TO_DATE('20:09:30', '%h:%i:%s') – NULL
(超过12时的小时用小写h,得到的结果为NULL,此时改成大写H即可’%H:%i:%s’)
2.情况
此种情况为mysql设置问题
类似于未指定的日期部分,STR_TO_DATE()函数将未指定的时间部分设置为零,请参见以下示例:

mysql> SELECT STR_TO_DATE('11','%h');
+------------------------+| 
STR_TO_DATE('11','%h') 
|+------------------------+|

以下示例将时间字符串转换为TIME值:

mysql> SELECT STR_TO_DATE('113005','%h%i%s');
+--------------------------------+| 
STR_TO_DATE('113005','%h%i%s')

结果由于mysql设置问题导致的,查询
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
在这里插入图片描述
由于设置no_zero_in_date导致的,如果想去掉此设置:
方法1、设置当前sql-mode:
SET GLOBAL sql_mode = ‘modes…’;
SET SESSION sql_mode = ‘modes…’;

方法2、my.cnf中配置sql-mode:
[mysqld]
#set the SQL mode to strict
#sql-mode=“modes…”
sql-mode = “STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

sql_mode常用值 :
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
具体参照 :
连接

SELECT STR_TO_DATE('20:09:30', '%h:%i:%s')-- 返回 NULL (超过12时的小时用小写h,得到的结果为NULL,此时改成大写H即可’%H:%i:%s’) 此种情况为mysql设置问题 类似于未指定的日期部分,STR_TO_DATE()函数将未指定的时间部分设置为零,请参见以下示例: mysql> SELECT STR_TO_DATE('11','%h'); +---------------------. 文章目录1.问题场景2.原因3.解决办法 1.问题场景 接收了一个老项目,其中有个时间字段为string类型,我现在要判断这个时间。选择得方法是用STR_TO_DATE()函数。测试服务器上没问题,生产上却没起作用。 <if test= "graduateStart != null and graduateStart != ''"> and DATE_FORMAT(STR_TO_DATE(e.end_date,'%Y'),"%Y") <![CDATA[ >= ]]> 在MySQL中将字符串转换为日期时,发现一日期转换代码无论怎样修改转换格式,输出总是为空,但另一同样格式的写法,却能正常转换,见下面的语句: select str_to_date('2016.08.22 13:46:12', '%Y.%m.%d %h:%i:%s'); --输出空 select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y % STR_TO_DATE()根据fmt格式字符串将str字符串转换为日期值。 STR_TO_DATE()函数可能会根据输入和格式字符串返回DATE,TIME或DATETIME值。 如果输入字符串是非... 最近在进行企业实训,目前在完成一个p2p的项目。今天遇到一个问题,记录在此。我的目的是为了提取出数据库中date类型字段的记录的年份字符串形式,即若记录为2020-04-02,则要提取出2020的字符串形式。 若要直接看解决方法,则推荐方法4,直接看即可,不用修改sql_mode 问题描述: 问题是在使用sql语句中的STR_TO_DATE命令时出现的。iting数据库中有一个名为apply... 字符串转换成日期: str_to_date(str,format) 日期转换成字符串:date_format(date,format) 时间转换成字符串:time_format(time,format) 在本教程中,我们将向您展示如何使用MySQL STR_TO_DATE()函数将字符串转换为日期时间值。MySQL STR_TO_DATE函数简介下面说明了STR_TO_DATE()函数的语法:STR_TO_DATE(str,fmt);STR_TO_DATE()根据fmt格式字符串将str字符串转换为日期值。 STR_TO_DATE()函数可能会根据输入和格式字符串返回DATE,TIME或DATET... 问题描述 修改日期sql语句:UPDATE fund_aid_info set birthdate = DATE_ADD(birthdate, INTERVAL 1 DAY) 执行该sql后,表中日期字段值并没有增加一天,反而变为null 问题排查 经过对日期字段值检查发现部分日期中含有00值,把00值修改为01等有效日期值后,问题解决,能正确添加日期 SQL:String转date+30分钟DATE_ADD(STR_TO_DATE(a.start_time,'%H:%i'),INTERVAL 30 MINUTE)1.Date  ——&gt;  String    使用的函数:DATE_FORMAT(date,format)     date:需要转换的日期       format:格式化的样式   format样式整理:        年: ... 我有一个带有where子句的函数select语句,在where子句中有一个类似的语句……to_date(camp.start_date, ‘MM/DD/YYYY’) >= to_date(:from_date,‘YYYY-MM-DD HH24:MI:SS’)但是,如果camp.start_dateNULL或没有行,那么它会抛出异常 –ORA-01858: a non-numeric cha... koa链接mysql数据库操作,在写表单插入数据功能的时候,发现在一个date类型的字段传入空值的时候,一直报错,不能正常插入空值.排查后发现,原来这个字段是date类型,而我在插入的时候,如果不给这个字段赋值,那么它默认是“”,类型是一个字符串,而不是date类型(也不是一个对象类型). 发现问题了,我的解法是在对从表单获取的这个数值做了下判断,判断这个值是否为空,如果为空,则将这个字段赋值null,否则直接从表单获取数值 . let birthday = postData.birthday;