我try 使用PDO运行SELECT查询

    $dbh = new PDO('connection string', 'user', 'pass'); 
    $stmt = $dbh->prepare('SELECT id, date_begin, date_end FROM v_accounts where id = 248234999'); 
    $stmt->execute();
    var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));

此查询的结果为:

    array(1) {
      [0] =>
      array(3) {
        'id' =>
        string(9) "248234999"
        'date_begin' =>
        string(10) "01.01.2022"
        'date_end' =>
        string(10) "01.07.2022"
      }
    }`

如果我运行该查询(SELECT id, date_begin, date_end FROM v_accounts where id = 248234999 )在pgsql数据库控制台中,我有另一个结果: 248234999,0006-07-15,0007-01-12 ID是唯一的.V_ACCOUNTS是一个视图,字段date_begindate_end由以下代码创建:`

   to_date(date_begin::text, 'DD.MM.YYYY'::text) AS date_begin,
   to_date(date_end::text, 'DD.MM.YYYY'::text)   AS date_end

它可以在php 5.6、php8.2、PostgreSQL 9.6下运行

这两种情况查询结果不同的原因是什么?

推荐答案

如果您有一个数据类型为date的列(在PostgreSQL中没有datetime这样的数据类型),则应该将never转换为text

 date_begin::text

为什么?结果取决于参数DATESTYLE的设置,该参数在不同的会话/客户端中可以是不同的.

psql幅小插图

set datestyle to ISO, DMY;  
postgres=# select date'2022-07-12'::text;
    text
------------
 2022-07-12

set datestyle to SQL, MDY; 
postgres=# select date'2022-07-12'::text;
    text
------------
 07/12/2022

因此,您可以看到一个相同的日期文字被强制转换为完全不同的文本字符串.

这并不能完全解释您的观察结果,但指向了问题的根源.简单地删除从date列到text再回到date的毫无意义的转换(这在代码中经常出现)

 to_date(date_begin::text, 'DD.MM.YYYY'::text) AS date_begin

并将其替换为一个简单的用法

date_begin

如果你想go 掉从timestampdatetime component

postgres=# select now()::date;
    now
------------
 2023-04-15

如果确实需要将日期/时间列转换为字符串,请使用带有显式格式的to_char.

Php相关问答推荐

文件大小在php下载读取文件中不可见

仅显示特定WooCommerce产品类别的额外产品字段

在WooCommerce中处理客户总支出中的退款

自定义WooCommerce查询字符串仅显示前3个产品

PHP cUrl扩展与v8.2.12更新损坏

在Google云存储对象上从PHP设置缓存控制TTL会更改错误的元数据

如何修复条带元素中的错误&&客户端_机密&

WooCommerce管理订单列表自定义列不显示值

在WooCommerce中的本地收件发货方式下添加一个 Select 字段

使注册字段UserMeta值对于WooCommerce中的每个用户是唯一的

htaccess 配置提供静态文件和动态文件

关于Laravel缓存出现的错误

使用 Spomky Labs JWT 框架中的 verifyWithKey 验证 id_token JWT 的签名需要 30 秒以上

如何通过工厂为点列制作一个假坐标?

同时执行odbc_execute、odbc_fetch_row和odbc_result

PHP / DOM : 解析 HTML 以提取基于类的数​​据

我需要获取传递到这个数组中的数据,但我没有得到它,因为在 Laravel 中数组是这样出现的

如何从 PHP 中的字符串位置排除图像扩展名

使用 PHP ImageMagick 库将 pdf 文件的前 n 页转换为单个 png 图像文件

Google Drive - 仅使用 FileID 获取文件的 FileSize