Должен ли я использовать! = Или < > для не равных в T-SQL?

это может быть очень трудно получить. Если вы ДОЛЖНЫ сделать это в запросе, а не в функции, проблема, с которой вы столкнетесь, - это предел количества строк, которые вы можете объединить в один столбец. Пока единственный способ, который я нашел для этого, - через инструкции iif.

SELECT 
test1.ColumnA AS ColumnA, 
First([test1].[ColumnB]) & IIf(Count([test1].[ColumnB])>1,"," & Last([test1].[ColumnB])) AS ColumnB
FROM test1
GROUP BY test1.ColumnA;

возвращает:

ColumnA  ColumnB 
1      abc,xyz 
2      efg,hij 
3      asd

Это вернет только первое и последнее, но Я уверен, что с небольшой работой вы могли бы выработать функцию «Выбрать», но, как я уже сказал, вам придется добавить несколько инструкций iif для каждого дополнительного элемента, который вы хотите добавить, следовательно, ограничение.

762
задан DineshDB 26 March 2018 в 09:48
поделиться

10 ответов

Технически они функционируют то же, если Вы используете SQL Server иначе T-SQL. При использовании его в хранимых процедурах нет никакой причины производительности использовать один по другому. Это затем сводится к персональному предпочтению. Я предпочитаю использовать <>, поскольку это - совместимый ANSI.

Можно найти ссылки на различные стандарты ANSI в...

http://en.wikipedia.org/wiki/SQL

523
ответ дан 22 November 2019 в 21:22
поделиться

Я понимаю что синтаксис C != находится в SQL Server из-за его наследия Unix (назад в дни SQL Server Sybase, пред Microsoft SQL Server 6.5).

10
ответ дан 22 November 2019 в 21:22
поделиться

Можно использовать, какой бы ни Вам нравится в T-SQL. В документации говорится, что они оба функционируют тот же путь. Я предпочитаю !=, потому что это читает "не равный" моему (базирующийся C/C ++/C#), ум, но гуру базы данных, кажется, предпочитает <>.

12
ответ дан 22 November 2019 в 21:22
поделиться
23
ответ дан 22 November 2019 в 21:22
поделиться

<> допустимый SQL согласно стандарту SQL-92.

http://msdn.microsoft.com/en-us/library/aa276846 (SQL.80) .aspx

33
ответ дан 22 November 2019 в 21:22
поделиться

Стандарт ANSI SQL определяет <> как "не равняются" оператору,

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt (5.2 <token> and <separator>)

Существует нет != оператор согласно ANSI/SQL 92 стандарта.

43
ответ дан 22 November 2019 в 21:22
поделиться

'<>' из стандарта SQL-92 и '!=' собственный оператор T-SQL. Это доступно в других базах данных также, но так как это не стандартно, необходимо взять его в зависимости от конкретного случая.

В большинстве случаев Вы будете знать, с какой базой данных Вы соединяетесь так, это не действительно проблема. В худшем случае Вам, возможно, придется сделать поиск и замену в Вашем SQL.

106
ответ дан 22 November 2019 в 21:22
поделиться

Большая часть поддержки баз данных != (популярные языки программирования) и <> (ANSI).

Базы данных та поддержка оба != и <>:

Базы данных, которые поддерживают оператор стандарта ANSI, исключительно:

  • IBM DB2 UDB 9.5: <>
  • Microsoft Access 2010: <>
711
ответ дан 22 November 2019 в 21:22
поделиться

! = , несмотря на то, что он не является ANSI, больше соответствует истинному духу SQL как удобочитаемого языка. Кричит не ровня. <> говорит, что для меня это (меньше, больше), что просто странно. Я знаю, что намерение состоит в том, что оно либо меньше, либо больше, чем, следовательно, не равно, но это действительно сложный способ сказать что-то действительно простое.

Мне просто пришлось взять несколько длинных SQL-запросов и с любовью поместить их в XML-файл по целому ряду глупых причин, на которые я не буду вдаваться.

Достаточно сказать, что XML не остановился с <> вообще, и мне пришлось поменять их на ! = и проверить себя, прежде чем я разрушился с помощью такелажа.

16
ответ дан 22 November 2019 в 21:22
поделиться

Похоже, что сами Microsoft предпочитают <>, а не !=, о чем свидетельствуют ограничения их таблиц. Лично я предпочитаю использовать !=, потому что я четко прочитал это как "не равное", но если вы введете [поле1 != поле2] и сохраните это как ограничение, то при следующем запросе оно будет выглядеть как [поле1 <> поле2]. Это говорит мне о том, что правильный способ сделать это - <>.

19
ответ дан 22 November 2019 в 21:22
поделиться