Mysql - Concat多个INT字段一起构成DATE字段

Poo*_*onk 0 mysql date date-formatting

我正在为客户工作一个小项目,数据库中的数据让我有点麻烦.我正在从数据库中填写付费分期付款的搜索表单.我可以把数据弄好,它的日期字段让我很烦.

每个分期的日期,月份和年份都有单独的字段.有没有办法可以使用CONCATDATECAST至可以在组合字段上使用来搜索数据.

我尝试了以下内容

SELECT DATE_FORMAT( CONCAT( received_date, received_month, received_year ) ,  '%d/%m/%Y' ) FROM policy_installments
Run Code Online (Sandbox Code Playgroud)

SELECT DATE_FORMAT(STR_TO_DATE(CONCAT('pit.received_date', '-', 'pit.received_month','-', 'pit.received_year'), '%d-%m-%Y') AS mydate, '%d-%m-%Y') AS modate FROM policy_installments pit ORDER BY mydate
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM policy_installments WHERE CONCAT(CAST(received_date AS CHAR),"-",CAST(received_month AS CHAR),"-",CAST(received_year AS CHAR)) >= '1-1-2014' AND CONCAT(CAST(received_date AS CHAR),"-",CAST(received_month AS CHAR),"-",CAST(received_year AS CHAR)) <= '31-3-2014'
Run Code Online (Sandbox Code Playgroud)

当我使用以下内容时,我会收到一些意外数据:

SELECT CONCAT_WS( received_date,  "-", received_month,  "-", received_year ) FROM policy_installments
Run Code Online (Sandbox Code Playgroud)

结果

2d313130312d3132303039
2d3237313032372d323732303039 etc etc
Run Code Online (Sandbox Code Playgroud)

3个字段中的每一个都是类型INT(11).

但是,这些都没有给我正确的数据.有没有办法我可以转换所有3个字段并使用日期传递到查询,以使我能够正确地获取正确的数据?

任何帮助将非常感激!

Rav*_*ddy 5

要将连接的字符串转换为日期,字符串的格式应与您用于转换的格式相同.

对于dd/mm/yyyy格式化的日期字符串,应使用%d/%m%Y格式转换为sql日期.

示例:

SELECT STR_TO_DATE( 
         CONCAT( received_date, '/', received_month, '/', received_year ),
         '%d/%m/%Y' 
       ) as rcvd_date
FROM policy_installments
Run Code Online (Sandbox Code Playgroud)

要与其他日期进行比较,您可以使用BETWEEN子句.

示例:

SELECT * FROM policy_installments 
WHERE 
    STR_TO_DATE( 
      CONCAT( received_date, '-', received_month, '-', received_year ),
      '%d-%m-%Y' 
    ) BETWEEN STR_TO_DATE( '1-1-2014', '%d-%m-%Y' ) 
          AND STR_TO_DATE( '31-3-2014', '%d-%m-%Y' )
Run Code Online (Sandbox Code Playgroud)

请参阅:
MySQL:STR_TO_DATE(str,format):将字符串转换为日期