MySQL:比较两个转换函数的结果

Posted

技术标签:

【中文标题】MySQL:比较两个转换函数的结果【英文标题】:MySQL: Comparing the result of two convert functions 【发布时间】:2020-05-18 15:31:33 【问题描述】:

我目前正在处理已使用 varchar 中的日期而不是使用日期时间格式进行初始化的数据库。 我应该将数据库的日期与输入日期(实际上是 2020 年 5 月 31 日)进行比较。

这是我的代码中出现问题的部分:

AND Convert(datetime,t1.fin_contrat, 103) > Convert(datetime, '31/05/2020', 103 )

但我有一个来自 phpMyAdmin 的错误:#1064 - 't1.fin_contrat, 103) 附近的语法错误 >= Convert(datetime, '31/05/2020', 103 ) GROUP BY siren OR' 第 1 行

根据此链接:https://docs.microsoft.com/fr-fr/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15#implicit-conversions varchar 应该能够直接转换为日期时间值。 我尝试使用 WHERE 而不是 AND 它不起作用。所以我别无选择,我正在寻找想法。 感谢您的帮助

【问题讨论】:

题名中有mysql(与PHP用法一致),但标签和链接暗示SQL Server。您实际使用的是什么数据库?并且需要查询的全文来调试语法错误,无论是哪种方式。 【参考方案1】:

在 MySQL 中,你需要这样的东西:

where date(t1.fin_contrat) = str_to_date('31/05/2020', '%d/%m/%Y')

这对应于您问题中的代码,但适用于 MySQL。

【讨论】:

【参考方案2】:

Microsoft SQL 之间的函数CONVERT 不同。和 Mysql

https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert

转换一个字符串。到一个日期。你必须使用STR_TO_DATE

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date

ps:

每个 sql server 软件(Oracle、Redshift、Posgtres、Mysql、MariaDB、MS SQL server、Sqllite,...)都有自己的 SQL 方言。通常简单的查询是可移植的,但更复杂或使用函数的查询必须重写。

【讨论】:

每个品牌的SQL数据库都有自己的方言。但是每个 sql server,作为一个特定的品牌,都使用 sql 的 t-sql 方言。 让我感到难过的是,任何所谓的数据库开发人员甚至都不知道他们正在使用什么数据库。你会问别人,他们会说“Management Studio”或“PHPMyAdmin”,这就像听到有人告诉你他们开的是“Sony”汽车,因为它是仪表板上立体声音响上的品牌。 :( 谢谢我确实使用了其他 SQL 方言,因为我使用 MySQL STR_TO_DATE 解决了,对不起 对不起,我的服务器正在使用它的 MariaDB,我没有创建它。 MariaDB 是 Mysql 的一个分支,仅供参考。

以上是关于MySQL:比较两个转换函数的结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql - varchar类型与数字的比较和转换

Mysql日期转换函数时间转换函数

mysql 计算两个日期的时间差函数小时分钟格式

mysql 计算两个日期的时间差函数年月格式例如3年2个月

mysql 计算两个日期的时间差函数小时分钟格式

MYSQL隐式类型转换