代码之家  ›  专栏  ›  技术社区  ›  W Kenny

SQLSTATE[42000]:[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]“FIELD”不是可识别的内置函数名

  •  0
  • W Kenny  · 技术社区  · 7 年前

    我使用的是Laravel:5.7,MS-SQL:2012。

    我的代码如下:

      $MonthOrder = implode(',', ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
      $listData->orderByRaw(DB::raw("FIELD(t2.Month, $MonthOrder) DESC"))
    

    我发现这个错误:

    select * from [dbo].[EXT_Data_DESC_Gamingdatas] as [t2] 
    
    inner join (
    
    select MAX(id) AS id, [Year], [Month], MAX(updated_at
    
    ) AS updated_at 
    
    from [EXT_Data_DESC_Gamingdatas] group by [Year], [Month]
    
    ) 
    
    max_table on [max_table].[id] = [t2].[id] and [max_table].[updated_at] = [t2].[updated_at] 
    
    order by [t2].[Year] desc, FIELD(t2.Month, Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) DESC)
    

    服务器]“字段”不是可识别的内置函数名

    .

    0 回复  |  直到 7 年前
        1
  •  1
  •   sticky bit    7 年前

    field

    你可以使用 CASE 而不是表达式。

    ...
    CASE
      WHEN t2.month = 'Jan' THEN
        1
      WHEN t2.month = 'Feb' THEN
        2
      ...
    END
    ...
    

    或者更改模式并使用不同类型存储数据。如果可能的话,为月份指定一个日期/时间类型或至少一些数字类型。

        2
  •  0
  •   W Kenny    7 年前

    我通过在此列中添加case when和order来解决自定义订单

                    DB::raw("(
                        CASE 
                        WHEN (Month = 'Jan') THEN 1
                        WHEN (Month = 'Feb') THEN 2
                        WHEN (Month = 'Mar') THEN 3
                        WHEN (Month = 'Apr') THEN 4
                        WHEN (Month = 'May') THEN 5
                        WHEN (Month = 'Jun') THEN 6
                        WHEN (Month = 'Jul') THEN 7
                        WHEN (Month = 'Aug') THEN 8
                        WHEN (Month = 'Sep') THEN 9
                        WHEN (Month = 'Oct') THEN 10
                        WHEN (Month = 'Nov') THEN 11
                        WHEN (Month = 'Dec') THEN 12 
                        END
                    ) as MonthOrder"),