首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL CONCAT -有趣的字符-但我不是在笑

SQL CONCAT -有趣的字符-但我不是在笑
EN

Stack Overflow用户
提问于 2012-07-02 06:27:05
回答 3查看 2.4K关注 0票数 18

我使用这个查询来生成一个博客存档菜单,如下所示:

代码语言:javascript
复制
SELECT CONCAT( MONTHNAME(published) , ' ' , YEAR(published)) AS monthyear, 
COUNT(*) AS total
FROM blog_articles
WHERE status = 'Online' AND Year(published) = 2012
GROUP BY CONCAT( MONTHNAME(published) , ' ' , YEAR(published))

预期结果:

代码语言:javascript
复制
January 2012        103
February 2012       87
March 2012          23
April 2012          99

实际结果:

计数是正确的,但应该是这样的,而不是精神上的东方:

代码语言:javascript
复制
May 2012       1

我怎样才能摆脱那些滑稽的字符,转而使用英语呢?

当我在phpMyAdmin中运行这个查询时,字符没有问题。

更新

我刚刚尝试运行conn.Execute("SET lc_time_names = 'en_US';"),但没有解决问题。为了检查,我使用了conn.Execute("SELECT @@lc_time_names;"),它返回"en_US“。

另一个更新

在MySQL论坛上搜索相关问题,我发现另一个人在抱怨同样的问题。一位MySQL专家说:

“这是著名的(臭名昭著的)服务器返回错误的类型,用于连接数字和字符串。必须使用(cast)形式才能工作,驱动程序无法分辨真正的类型。”

我不确定cast是什么,也不知道如何解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-02 09:58:54

愚蠢的服务器,数学是用来写数字的。

CAST() CAST(enum_col AS CHAR) - cast a value as a certain type

代码语言:javascript
复制
 SELECT CONCAT( CAST(MONTHNAME(published) as char) , ' ' , CAST(YEAR(published)) as char) AS monthyear, 
 COUNT(*) AS total
 FROM blog_articles
 WHERE status = 'Online' AND Year(published) = 2012
 GROUP BY CONCAT( MONTHNAME(published) , ' ' , YEAR(published))

DATE_FORMAT()您也可以尝试使用DATE_FORMAT(YEAR(published),'%Y')函数代替CAST。

票数 7
EN

Stack Overflow用户

发布于 2012-07-02 06:33:08

看起来你有一个lc_time_names设置“有趣”。

尝试:

设置lc_time_names = 'en_US';

在运行查询之前。

票数 6
EN

Stack Overflow用户

发布于 2012-07-02 06:33:04

那就把你的区域设置换成英语吧。下面也是SQL。

代码语言:javascript
复制
SET lc_time_names = 'en_US';

From here

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11286108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档