SQLSTATE [42000]: [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL Server] 'FIELD' не является распознанным именем встроенной функции - PullRequest
0 голосов
/ 08 апреля 2019

Я использую Laravel: 5.7, MS-SQL: 2012.

Собираюсь сделать собственный заказ By перед запуском -> get () из MS SQL

Мой код приведен ниже:

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

Я получаю эту ошибку:

SQL:

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)

SQLSTATE [42000]: [Microsoft] [ODBCДрайвер 11 для SQL Server] [SQL Server] 'FIELD' не является распознанным именем встроенной функции

.

Как решить эту проблему?Я не могу найти подходящего ответа ...

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

field - это функция MySQL. В SQL Server его нет.

Вместо этого вы можете использовать выражение CASE.

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

Или измените схему и сохраните данные, используя разные типы. Если возможно, тип даты / времени или хотя бы какой-либо числовой тип для месяцев.

0 голосов
/ 10 апреля 2019

Благодаря @sticky Я решил нестандартный заказ, добавив случай, когда и порядок по этому столбцу

                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"),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...