- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因为 DAY()
、MONTH()
、YEAR()
和 DATE_FORMAT()
都不是在 Doctrine2 中可用,当使用 PostgreSQL 数据库时,如何在查询生成器中使用这些函数之一?
我找到了几个教程,但它们都适用于 MySQL,没有一个适用于 PostgreSQL。
最佳答案
由于 SQL 语法因数据库供应商而异,因此不可能(或至少不太容易)创建独立于供应商的解决方案。所以这是 PostgreSQL 的一种方法。
我们要使用的 SQL 函数是 to_char()
,参见 https://www.postgresql.org/docs/9.6/static/functions-formatting.html
首先我们需要创建一个自定义 DQL 函数,参见 https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/dql-user-defined-functions.html
namespace App\DQL;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
class ToChar extends FunctionNode
{
public $timestamp = null;
public $pattern = null;
// This tells Doctrine's Lexer how to parse the expression:
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->timestamp = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_COMMA);
$this->pattern = $parser->ArithmeticPrimary(); // I'm not sure about `ArithmeticPrimary()` but it works. Post a comment, if you know more details!
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
// This tells Doctrine how to create SQL from the expression - namely by (basically) keeping it as is:
public function getSql(SqlWalker $sqlWalker)
{
return 'to_char('.$this->timestamp->dispatch($sqlWalker) . ', ' . $this->pattern->dispatch($sqlWalker) . ')';
}
}
然后我们在 Symfony 4 中注册它,参见 https://symfony.com/doc/current/doctrine/custom_dql_functions.html
# config/packages/doctrine.yaml
doctrine:
orm:
dql:
string_functions:
to_char: App\DQL\ToChar
现在我们可以在任何存储库中使用它:
return $this->createQueryBuilder('a')
->select("to_char(a.timestamp, 'YYYY') AS year")
->groupBy('year')
->orderBy('year', 'ASC')
->getQuery()
->getResult()
;
关于postgresql - Doctrine2 : YEAR, PostgreSQL 的 MONTH、DAY 或 DATE_FORMAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50890053/
我在我的数据库中为每个预订使用 unix 时间戳整数存储时间。我遇到了一个问题,我的查询没有正确选择内容,而且似乎休息了一天。 例如,在我的网站上,我有一个日历表,它显示了一个月中的每一天。我使用以下
我在 cakephp 框架中工作, 因为我将日期字符串存储在 varchar 字段中。我需要在需要更改格式之后转换它的时区。这是查询。 SELECT DATE_FORMAT(cast( CONVERT
为什么我的日期比较不起作用, 主要返回所有日期或不返回任何日期 Select DATE_FORMAT(time,'%Y - %m - %d'),'2013 - 01 - 10' FROM signa
我有一张来自 Daloradius 的 table : {CREATE TABLE `radacct` ( `radacctid` bigint(21) NOT NULL AUTO_INCREME
2015 年有 53 周。如果您现在的一周从星期一开始,则为 2016 年 1 月 1 日、2 日和 3 日,也在第 53 周。2016 年 1 月 4 日是第 1 周。 在 MySQL 中,它输出如
我收到了一些时间戳,其格式如下: 2018-02-26T23:59:49Z 我想将此日期插入到日期时间列中。执行以下语句有效 SELECT DATE_FORMAT('2018-02-26T23:59:
我有一个名为“reportinc”的表,我必须在其中提取从 1 或过去几天的 18:01(时间格式为 %H:%i)到今天 18:00 的项目(它是 VARCHAR 字段)。 我尝试过这个查询 SELE
select d.doctorFName,d.doctorLName ,count(ap.appointmentID) totalap, GROUP_CONCAT(DISTINCT s.speci
我正在尝试关注 my_table,其中修改时间的类型为 datetime select DATE_FORMAT(modifiedtime,'%d-%m-%Y') from my_table where
以下 sql 查询的等效 cakephp find 查询是什么? 假设price_date字段类型为日期时间 $sql = "SELECT id,product_id,date_format("%Y-
我有以下输出 2015-05-06 10:30:00 SELECT DATE_FORMAT( NOW( ) , '%Y-%m-%d' ' 10:30:00' ) 我现在想增加日期,以便输出,2015-
2016年的第一周,实际上是2015年的第53周,被mysql转换成2016年的第53周。如何将其转换为实际周,即 2015 年第 53 周? http://www.epochconverter.co
我将 Doctrine2 与 Laravel5 和 MySql 一起使用,并且在 GROUP_CONCAT()、DATE_FORMAT() 方面遇到一些问题。 我通过安装扩展 Beberlei Doc
我相信我是一个熟练的 mysql 用户,但显然我不是。 我以为 mysql 会在比较之前进行转换,但是这个查询让我感到困惑: SELECT DATE_FORMAT('2019-07-19 12:0
我在Mysql中的代码: 从项目中选择 DATE_FORMAT( 创建 , '%Y'); 如何在 CakePHP 中编码? 最佳答案 这里可以使用func()方法。考虑到您将在 Item 模型中编写查
当我尝试使用 DATE_FORMAT(delv_time, '%Y-%m-%d') 它返回 null。 最佳答案 就 MySQL 而言,这还不是日期。这是一个字符串。您需要使用 STR_TO_DATE
我有一个小的 sql 查询,它获取日期时间列的日期部分 Select DATE_FORMAT(`tbldata`.`fldDate`, '%d/%m/%Y') AS formattedDate fro
尝试将时间 ID 和时间本身带回到存储在 mysql 中的列表框中。在 myadmin 中运行 sql 运行良好,在代码中尝试...不太好。带回 undefined index 错误。谢谢。 cal
我试图按日期升序排列日期和时间表,然后按开始时间升序排列,但我的日期列表显示的顺序不正确。不过,开始时间列表似乎确实有效。 顺序应显示为 18/08/2014 然后 19/08/2014 然后 20/
有人可以解释一下 difference between the %h and %I ?两者都被描述为“小时 (01..12)” 并且与秒 %s 和 %S 相同?这背后有什么“奇怪”的功能吗?复制它的原
我是一名优秀的程序员,十分优秀!