在mysql中的SELECT语句的WHERE子句中的CONCAT

时间:2014-03-05 20:33:42

标签: mysql sql

M2014是数据库表格中的文本字段。

此语句正常工作(返回计数= 368)

SELECT count(*) FROM arealist WHERE M2014 = 'Yes' 

但是,我对这个语句有问题(返回count = 0)我已经改变了 是concat

SELECT count(*) FROM arealist WHERE concat('M','2014') = 'Yes' 

可能是什么原因和解决方案?

3 个答案:

答案 0 :(得分:2)

您正在比较第二个SELECT语句中的两个字符串。第二个语句是附加两个字符串“M”和“2014”,这导致查询将“M2014”与“是”两个字符串进行比较,而不是列的值。做出这样的陈述:

SELECT COUNT(*) 来自AreaList 在哪里M2014 = CONCAT('Y','es')

该语句将返回368行。你最终试图用这个陈述做什么?

答案 1 :(得分:0)

您无法为MySQL中的where子句生成动态列名。有相当多的Stack Overflow文章。通常,我会安排我的数据,以便与行关联的某种日期或时间戳,而不是使用特定于日期的列。 (我假设M2014与2014年有关)。以这种方式排列时,您可以根据日期要求选择所需的内容。

也就是说,如果您的数据模型是固定的,那么您最好的选择是使用另一种语言C#,python等,以动态创建您需要的列名,然后将整个查询发送到MySQL。或者,您可以编写一系列SQL语句,一个用于您感兴趣的日期列。

Google中的以下查询显示了许多相关结果:https://www.google.com/search?client=opera&q=dynamic+column+names+in+sql&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest&safe=active#channel=suggest&q=dynamic+column+names+in+mysql+where+clause&safe=active

答案 2 :(得分:0)

你可以在php那样做

  $year = 2014;

   SELECT count(*) FROM arealist 
   WHERE M$year = 'Yes'