如何在 Laravel 数据库查询中格式化然后连接?
How to FORMAT then CONCAT in Laravel DB Query?
我使用这个格式化了 total_price
列;
DB::raw("FORMAT(sales_quotations.total_price, 2) as price),
在此之后,我需要将 currency_name
连接到格式化的 total_price
。
但如果我这样做;
DB::raw("CONCAT(settings_currencies.currency_name,' ', price) as totalPrice"),
它抛出了以下错误,因为它找不到 price
。我认为不可能以这种方式拥有它。
LOG.error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'price' in 'field list'
有什么方法可以在一行中实现这一点吗?
我试过了;
DB::raw("CONCAT(settings_currencies.currency_name,' ', FORMAT(sales_quotations.total_price, 2)) as totalPrice")
但是没用。错误是;
LOG.error: SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE), (utf8mb4_unicode_ci,COERCIBLE) for operation 'concat'
TIA
我已经解决了上面的问题。在我的例子中,我有一些空的 currency_name
,如果它是空的,它会抛出下面的错误(正如我上面提到的)。
LOG.error: SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE), (utf8mb4_unicode_ci,COERCIBLE) for operation 'concat'
这是因为排序规则不同,您可以通过将 string/column 转换为一种排序规则(例如 utf8)来解决这个问题。
我的行代码是这样的;
->selectRaw('CONCAT(CAST(settings_currencies.currency_name AS CHAR CHARACTER SET utf8)," ", FORMAT(sales_quotations.total_price, 2)) as totalPrice');
我使用这个格式化了 total_price
列;
DB::raw("FORMAT(sales_quotations.total_price, 2) as price),
在此之后,我需要将 currency_name
连接到格式化的 total_price
。
但如果我这样做;
DB::raw("CONCAT(settings_currencies.currency_name,' ', price) as totalPrice"),
它抛出了以下错误,因为它找不到 price
。我认为不可能以这种方式拥有它。
LOG.error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'price' in 'field list'
有什么方法可以在一行中实现这一点吗?
我试过了;
DB::raw("CONCAT(settings_currencies.currency_name,' ', FORMAT(sales_quotations.total_price, 2)) as totalPrice")
但是没用。错误是;
LOG.error: SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE), (utf8mb4_unicode_ci,COERCIBLE) for operation 'concat'
TIA
我已经解决了上面的问题。在我的例子中,我有一些空的 currency_name
,如果它是空的,它会抛出下面的错误(正如我上面提到的)。
LOG.error: SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE), (utf8mb4_unicode_ci,COERCIBLE) for operation 'concat'
这是因为排序规则不同,您可以通过将 string/column 转换为一种排序规则(例如 utf8)来解决这个问题。
我的行代码是这样的;
->selectRaw('CONCAT(CAST(settings_currencies.currency_name AS CHAR CHARACTER SET utf8)," ", FORMAT(sales_quotations.total_price, 2)) as totalPrice');