SQL 查询中的 CONVERT 或 CAST 字段
Posted
技术标签:
【中文标题】SQL 查询中的 CONVERT 或 CAST 字段【英文标题】:CONVERT or CAST field in SQL Query 【发布时间】:2014-04-09 15:34:48 【问题描述】:我试图从中提取数据的 mysql 数据库中有一个 TimeStamp 字段。我正在尝试将其作为字符串获取,因此我一直在使用以下查询:
select CONVERT(VARCHAR, date_created, 120) from junk;
它抛出错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR, date_modified, 120) from junk limit 10' at line 1
谁能告诉我我做错了什么?
【问题讨论】:
MySql 和 Sql Server 是两个完全不同的产品。你使用MySql的错误信息,not Sql Server. 很确定CONVERT
不是 ANSI 标准并且特定于 SQL Server。 CAST
是标准的,但我认为不允许格式化代码。
VarChar 需要一个大小,例如VarChar(10)
@TonyHopkinson 实际上在 SQL Server 中 varchar
没有调整大小会得到类似 30 的隐式大小。不过,问题在于将 T-SQL 代码与 MySQL RDBMS 混合使用。
是的,因为某种原因,我看到转换和样式立即启动了我的 sql server...
【参考方案1】:
如果您想明确格式化为 yyyymmdd(sql server 中的样式 120)
Select DATE_FORMAT(somedate, '%Y%m%d') From SomeTable
【讨论】:
感谢您的回答!格式不是我想要的,但我改变了它以获得我需要的东西。我使用了以下代码:select DATE_FORMAT(date_created, '%Y-%m-%d %h:%i:%s') from junk;
。再次感谢!【参考方案2】:
MySQL
中的CONVERT()
用于不同字符集之间的转换,需要DATE_FORMAT()
:
SELECT DATE_FORMAT(date_created, '%Y%m%d %H%i%S')
FROM Junk
更新:原来CAST()
错误地使用了VARCHAR()
,但CAST()
也可以工作:
SELECT CAST(date_created AS CHAR(10))
FROM Junk
DATE_FORMAT() options
【讨论】:
mysql> select CAST(date_created AS VARCHAR(30)) from junk; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(30)) from junk' at line 1
还有什么建议吗?
CAST()
应该也可以工作 - 但DATE_FORMAT()
确实更可取。
@ypercube 为什么CAST()
给他一个错误?我是一名 SQL Server 人,还有很多关于 MySQL 的知识。
啊,应该是CAST(date_created AS CHAR(30))
或者更好:CAST(date_created AS CHAR(10))
【参考方案3】:
在 MySql 中,CONVERT()
函数用于在字符集(如 utf-8 或 ascii)之间转换现有的字符串类型(如 varchar)。要格式化 TimeStamp 列,请使用 FROM_UNIXTIME()
函数。
【讨论】:
FROM_UNIXTIME
将该列中的所有数据转换为NULL
。 select FROM_UNIXTIME(date_created) from junk;
是我使用的查询。以上是关于SQL 查询中的 CONVERT 或 CAST 字段的主要内容,如果未能解决你的问题,请参考以下文章
SQL 中的 CAST 和 CONVERT 是不是相同? [复制]
SQL Server 与 T-SQL 中的 Cast 和 Convert 函数有啥区别? [复制]