提问人:Humza 提问时间:10/21/2023 最后编辑:mickmackusaHumza 更新时间:10/21/2023 访问量:69
如何使用 PHP 和 PostgreSQL 将 String 转换为 Int
How to cast String to Int using PHP with PostgreSQL
问:
我正在使用用 php 编写的 api,即从 postgres 数据库获取数据。但是,查询会以字典排序的形式返回其中一个数据字段。因此,我想尝试将其转换为整数。如果这是错误的,请向我建议其他方法。下面是相关的代码片段
case( 'location_group' ):
$filter_label_column = 'location_group_' . $pk_location_group_type . '_name';
if( !is_missing_or_empty( $request['params'], 'filter_label' ) )
{
$filter_label_column = 'location_group_' . $pk_location_group_type . '_' . $request['params']['filter_label'];
}
$query->select( [ $filter . "_$pk_location_group_type", 'pk' ], [ $filter_label_column, 'label' ] )
->group( $filter . "_$pk_location_group_type", $filter_label_column )
->order( 'label', 'asc' );
break;
尝试以多种方式进行强制转换,结果没有返回标签的数据,尝试以下(也尝试将 SIGNED 替换为 INTEGER):
case 'location_group':
$filter_label_column = 'location_group_' . $pk_location_group_type . '_name';
if (!is_missing_or_empty($request['params'], 'filter_label')) {
$filter_label_column = 'location_group_' . $pk_location_group_type . '_' . $request['params']['filter_label'];
}
$query->select([$filter . "_$pk_location_group_type", 'pk'], ["CAST($filter_label_column AS SIGNED)", 'label'])
->group($filter . "_$pk_location_group_type", "CAST($filter_label_column AS SIGNED)")
->order('label', 'asc');
break;
答:
0赞
Muhammad Sarmad
10/21/2023
#1
您似乎希望将 PostgreSQL 查询中的列转换为整数,以便以数字格式接收数据,但示例代码使用了 PHP 的 SQL 构造工具,而不是实际执行查询。在 PostgreSQL 中将列转换为整数的正确方法如下:
case 'location_group':
$filter_label_column = 'location_group_' . $pk_location_group_type . '_name';
if (!is_missing_or_empty($request['params'], 'filter_label')) {
$filter_label_column = 'location_group_' . $pk_location_group_type . '_' . $request['params']['filter_label'];
}
$query->select([
$filter . "_$pk_location_group_type",
'pk'
], [
"CAST($filter_label_column AS INTEGER)",
'label'
])->group($filter . "_$pk_location_group_type", "CAST($filter_label_column AS INTEGER)")
->order('label', 'asc');
break;
在此代码中,您已使用该函数将 转换为整数,这是正确的。不过,用于铸造而不是 。CAST
$filter_label_column
AS INTEGER
AS SIGNED
验证 中的信息是否实际上是一个字符串,如果此函数的结果与预期结果不匹配,则可以将其转换为整数。如果列中存在非整数,则可能需要以不同的方式处理它们,例如通过过滤掉它们或在非整数值的情况下设置默认值。$filter_label_column
评论
$query->select([$filter . "_$pk_location_group_type", 'pk'], [new \yii\db\Expression("CAST($filter_label_column AS SIGNED)"), 'label']) ->group($filter . "_$pk_location_group_type", new \yii\db\Expression("CAST($filter_label_column AS SIGNED)")) ->order('label', 'asc');