1) Если я хочу вернуть первые два символа строки, что является лучшим / самым быстрым методом?
LEFT ('YourString', 2) ИМХО тем более естественно, более читабельно с точки зрениякричать и кричать это намерение.Я действительно не думаю, что это будет причиной низкой производительности - гораздо более вероятно, что удастся поразить плохую производительность из-за плохо сконструированного запроса, отсутствующих индексов и т. Д. Я бы просто придерживался того, что кажется естественным и самым простым.*2) Также, если у меня есть дата и я хочу группировать по дням, я буду использовать convert (varchar (10), getdate ()), так как наш формат БД в формате гггг / мм / дд, что даст «2010/02/10»если бы я хотел сгруппировать по месяцам, я бы использовал varchar (7) вместо этого, чтобы дать '2010/02'
. При преобразовании дат я бы всегда указывал последний параметр CONVERT, который является стилем.Например,
-- 112 = ISO format. This would give yyyyMM
SELECT CONVERT(VARCHAR(6), GETDATE(), 112)
Обратите внимание, что это хороший пример того, что я сказал выше: другие области с большей вероятностью будут работать хуже.Если вы примените CONVERT к столбцу в предложении WHERE запроса, это предотвратит использование индекса для этого столбца.Поэтому вместо этого я бы изменил в запросе диапазон дат, указанный с начальной датой = началом месяца и конечной датой = 1-м днем следующего месяца:
SELECT *
FROM SomeTable
WHERE DateField >= @StartOfMonth AND DateField < @FirstDayOfNextMonth
Это будет использоватьиндекс на DateField, обеспечивающий лучшую производительность, чем подход CONVERT