Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые знатоки. У меня есть идея написать запрос, который будет выполнять сортировку результатов по параметру, переданному в запрос. И все работало до тех пор, пока поля, по которым производилась сортировка были однотипные. Это поля name и code. Когда добавил еще одно поле id, типа int, стал получать ошибку: "Conversion failed when converting the nvarchar value 'ХХХХХХХ' to data type int". Т.е. в операторе CASE происходит преобразование типов. При этом, есть вероятность, что придется сортировать по полю с датой, сто также приводит к ошибке. Как обойти эту ошибку? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 13:38 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017 Типы возвращаемых данных Возвращает тип с наивысшим приоритетом из набора типов в выражении result_expressions и необязательном выражении else_result_expression.. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 13:41 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Конвертируйте поля в выражении case к одному типу. Или динамику городите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 13:42 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
SniffkaЗдравствуйте, уважаемые знатоки. У меня есть идея написать запрос, который будет выполнять сортировку результатов по параметру, переданному в запрос. И все работало до тех пор, пока поля, по которым производилась сортировка были однотипные. Это поля name и code. Когда добавил еще одно поле id, типа int, стал получать ошибку: "Conversion failed when converting the nvarchar value 'ХХХХХХХ' to data type int". Т.е. в операторе CASE происходит преобразование типов. При этом, есть вероятность, что придется сортировать по полю с датой, сто также приводит к ошибке. Как обойти эту ошибку? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: sql 1. 2. И так далее. Но изврат, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 13:42 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Sniffka, ничего толкового из этого не получится. Сортируйте в клиентском приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 13:56 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
А еще лучше - используйте табличную функцию, а не процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 13:58 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Sniffka, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 14:19 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
invm, ваше решение мне понравилось больше. Удалось отделаться только 1 преобразованием типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 14:43 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, Сортировать на клиенте не вариант. Запрос -- представляет собой одчитывание данных. И выглядит полностью так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 14:46 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Sniffka, в сложных случаях лучше использовать генератор запросов, написанный CLR (процедура, функция). При больших объемах данных variant тип даст ухудшение производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 14:51 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовSniffka, в сложных случаях лучше использовать генератор запросов, написанный CLR (процедура, функция). При больших объемах данных variant тип даст ухудшение производительности. Эту проблему держу в голове. Если начнет проседать производительность, примем меры. :о) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 14:55 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
SniffkaУдалось отделаться только 1 преобразованием типаНе надо лениться. Добавите дату - придется писать преобразование везде. Но можно упростить Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 14:55 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
invmНе надо лениться. Добавите дату - придется писать преобразование везде. почему? sql_variant - имеет наибольший приоритет, среди всех типов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 15:00 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
msLex, Да, вы правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 15:06 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
invm, Более того, нет ни одного типа, который требовал бы явного приведение к sql_variant. Либо поддерживается неявное, либо приведение вообще не поддерживается. https://docs.microsoft.com/ru-ru/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 15:10 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
SniffkaВладислав КолосовSniffka, в сложных случаях лучше использовать генератор запросов, написанный CLR (процедура, функция). При больших объемах данных variant тип даст ухудшение производительности. Эту проблему держу в голове. Если начнет проседать производительность, примем меры. :о)Универсальная сортировка может быть либо по строке, либо по sql_variant И тут sql_variant не обязательно проигрывает по производительности, - зависит от исходного типа данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 15:11 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
invmSniffkaпропущено... Эту проблему держу в голове. Если начнет проседать производительность, примем меры. :о)Универсальная сортировка может быть либо по строке, либо по sql_variant И тут sql_variant не обязательно проигрывает по производительности, - зависит от исходного типа данных.Но для разных типов нужны разные типы сортировки. Например, по целому числу - одно правило, по строковому представлению числа - другое. Так что не просто преобразовать в строку придётся, но и после этого её обработать (например, выравнять по правому краю для целого). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 15:28 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Я пробовал использовать SQLVariant для поиска в таблице ~200млн строк, оказалось хуже, чем строка. Речь идет о приведении к типу при сравнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 15:36 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовЯ пробовал использовать SQLVariant для поиска в таблице ~200млн строк, оказалось хуже, чем строка. Речь идет о приведении к типу при сравнении.Верю. Только зачем обобщать? Тем более, что сортировка - не сравнение, и, в большинстве случаев, простого преобразования в строку недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 16:39 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
Не надо ничего преобразовывать. Столбцов мало, вариантов - тоже. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2019, 08:33 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
uaggster Код: sql 1. 2. 3. 4. 5. 6. этот не гарантирует сортировку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2019, 12:15 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
msLex, да, вы правы. Тогда так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2019, 12:54 |
|
||
|
Сортировка ORDER BY по условию CASE
|
|||
|---|---|---|---|
|
#18+
invmSniffkaпропущено... Эту проблему держу в голове. Если начнет проседать производительность, примем меры. :о)Универсальная сортировка может быть либо по строке, либо по sql_variant И тут sql_variant не обязательно проигрывает по производительности, - зависит от исходного типа данных. Эээ? Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2019, 15:11 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39873976&tid=1687156]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 386ms |

| 0 / 0 |
