Конфликт типа операнда: дата несовместима с ошибкой smallint на сервере sql

Я написал SQL-запрос, чтобы получить количество нанятых сотрудников в период с 2006 по 2008 год. вот мой код из таблицы adventurework2014.dimemployee

SELECT YEAR(cast('HireDate' as int)), DepartmentName,
        count(ParentEmployeeKey) AS 'total emplyee join' 
FROM DimEmployee 
where HireDate between 2006 and 2008 
group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
ORDER BY  YEAR(HireDate)

мой приведенный выше код показывает ошибку

Operand type clash: date is incompatible with smallint

пожалуйста, помогите мне с некоторым решением.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
4 246
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы пропустили использование year() в предложении where:

where year(HireDate) >= 2006 and year(HireDate) <= 2008 

Кроме того, вам также не нужно использовать функцию cast() с year(), поскольку она будет возвращать числовой тип.

Ваш оператор SELECT для меня странен, он должен иметь агрегированный столбец, когда вы включаете GROUP BY:

SELECT YEAR(HireDate), DepartmentName,
       count(ParentEmployeeKey) AS 'total emplyee join' 
FROM DimEmployee 
WHERE year(HireDate) >= 2006 and year(HireDate) <= 2008 
GROUP BY DepartmentName, YEAR(HireDate), FirstName, ParentEmployeeKey
ORDER BY YEAR(HireDate);

Я думаю, что также следует избегать приведения к типу найма

Tizianoreica 23.01.2019 12:10
Ответ принят как подходящий

Ниже оператор примет HireDate как строку, которую нельзя преобразовать в int.

cast('HireDate' as int)

В идеале вам не нужно преобразовывать его в int, если вы используете YEAR на дату, он даст вам только int.

Измените свой запрос следующим образом.

SELECT YEAR(HireDate), DepartmentName,
            count(ParentEmployeeKey) AS 'total emplyee join' 
    FROM DimEmployee 
    where YEAR(HireDate) >= 2006 and YEAR(HireDate) <= 2008 
    group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
    ORDER BY  YEAR(HireDate)

идеально сейчас. Я узнал очень важную вещь о функции года и функции приведения. Благодарность

Roy 23.01.2019 12:18

Пожалуйста, попробуйте ниже,

SELECT YEAR(cast(HireDate as date)), DepartmentName,
        count(ParentEmployeeKey) AS 'total emplyee join' 
FROM DimEmployee 
where YEAR(cast(HireDate as date)) between 2006 and 2008 
group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
ORDER BY  YEAR(cast(HireDate as date))

Если ваш столбец «HireDate» является полем даты и времени, вам не нужно приведение

Другие вопросы по теме