2014-10-07 2 views
0

Я написал следующий запрос:TRIM функция на DateField в SQL Server

select * 
from employees 
order by (CAST(LTRIM(RTRIM(JoingDate)) AS SMALLDATETIME)) desc 

Запрос влияет на производительность. Нужно ли использовать TRIM на колонке DateTime? Как мы можем переписать вышеуказанный запрос для повышения производительности и минимизации времени выполнения? Используем ли мы функцию CONVERT вместо CAST?

+3

Нет, 'CONVERT' над' CAST' не ускоряет вас. Что может * помочь: ** (1) ** не выбирать ** все столбцы ** ('SELECT *'), а только те, которые вам действительно нужны ** и ** (2) ** не выбирайте ** все строки ** (опуская предложение 'WHERE'). –

+0

Прежде чем избавиться от королевского« мы ». Это ваш вопрос. Используйте «Я», «Я» и «Мой». Как выглядит ваш 'JoingDate'? 'CAST' и' CONVERT' - почти то же самое, поэтому не ожидайте увеличения производительности от другого. –

+1

'ORDER BY' является дорогостоящим, индекс сделает его менее дорогостоящим, но я считаю, что вам нужно, чтобы поле' JoingDate' находилось в правильном типе данных, чтобы получить какую-либо выгоду от индекса. –

ответ

0

Если меня не хватает чего-то, вы должны просто сделать это:

select * 
from employees 
order by JoingDate desc 

Не знаю, почему вы преобразуем дату в строку, а затем обратно к дате. Если вы хотите smalldatetime в течение datetime, вы можете просто использовать его/преобразовать, но почему?

select * 
from employees 
order by CAST(JoingDate AS SMALLDATETIME) desc 
+0

Возможно, дата хранится в некотором подстрочном формате строки, который не сортируется в хронологическом порядке. –

+0

@MartinSmith OP специально сказал в своем посте, что это «DATETIME». Возможно, это не было буквальным. – Steve