Drupal 7 - db_select:SQL函数在where条件下

时间:2018-04-21 17:48:28

标签: sql drupal drupal-7

我需要在我的select语句中使用这个条件:

WHERE YEAR(date) = YEAR(CURDATE()) 

但如果我这样做,就像这样:

$query = db_select('table', 't');
$query->fields('t');
$query->condition('YEAR\(date\)', 'YEAR(CURDATE())', '=');

Drupal没有获得它(即使我没有逃避这些括号 - 它只是忽略它们)因为我收到错误:

Column not found: 1054 Unknown column 'YEARdate' in 'where clause':

如何克服此错误?

3 个答案:

答案 0 :(得分:0)

嗯..就像这样,似乎:

*ngFor

$query->where('YEAR(date) = YEAR(CURDATE())'); 允许任意SQL:

  

where()方法允许添加任意SQL作为条件片段。 $ snippet可能包含任何合法的SQL片段,如果它具有可变内容,则必须使用命名占位符添加它。 $ args数组是一个占位符和值的数组,将替换为代码段。由开发人员确保该代码段是有效的SQL。没有对代码段进行特定于数据库的修改。

答案 1 :(得分:0)

嗯,您也可以使用db_query,它允许您“不使用Drupal”编写SQL查询。 我的意思是,您将能够添加自定义WHERE语句或任何SQL适当的函数,如自定义函数;)

例如

String usernameField = this.getConfiguredUsernameParameter(); // app_username String passwordField = this.getConfiguredPasswordParameter(); // app_password UserDetails userDetails = this.registeredUserDetailsImplementation.loadUserByUsername(request.getParameter(usernameField)); String passwordHash = userDetails.getPassword(); String rawPassword = request.getParameter(passwordField); String salt = this.getConfiguredSalt(); // can be null if (this.configuredPasswordEncoder.isPasswordValid(passwordHash, rawPassword, salt) { return true; } return false;

答案 2 :(得分:0)

使用addExpression方法: https://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQuery%3A%3AaddExpression/7.x

$query = db_select('table', 't');
$query->fields('t');
$query->addExpression('YEAR(t.date) = YEAR(CURDATE())');
$result = $query->execute()->fetchAll();

var_dump($result);