Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
kombala Member Откуда: Сообщений: 41 |
Мне нужно просуммировать данные из нескольких строк и дело в том, что в них должны содержаться только числовые значения, но пользователь мог написать и текстовые символы, возможно ли отсечь все не_числовые значения из результата? |
2 июн 17, 11:49 [20534086] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
TRY_CONVERT |
||
2 июн 17, 11:52 [20534099] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
|
||
2 июн 17, 12:08 [20534179] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8320 |
Здесь публика недоумевает, так как суммируются числа, а не символы этих чисел. То есть автор прокололся с типом хранимых данных. |
2 июн 17, 12:10 [20534188] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
10р. 15р. 50р. Нормальное требование. Не руками же чистить... :) |
||
2 июн 17, 14:52 [20535059] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
Но в результате, Карл! Как он в принципе может получиться при таких данных? |
||||
2 июн 17, 14:54 [20535067] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Например, так SELECT SUM( CONVERT( INT, CASE WHEN ss.[i] > 0 THEN LEFT( t.[x], ss.[i] - 1 ) ELSE t.[x] END ) ) FROM ( VALUES ( '100' ), ( '10 р' ), ( '22руб' ) ) t( x ) CROSS APPLY ( SELECT [i] = PATINDEX( '%[^0-9]%', t.[x] ) ) ss
Даже самых спокойных достает ТЗ и их постановщики... |
||||
2 июн 17, 15:27 [20535237] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
Что же делать в таком случае? Выбирать эти числа из кучи всяких символов и тоже суммировать? Игнорировать такие строки? Может, вообще суммировать только строки, в которых только цифры? |
||
2 июн 17, 15:30 [20535263] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Так я же говорю. Тупое ТЗ требует тупого решения. А "после сборки доработать напильником" :) |
||||
2 июн 17, 15:33 [20535276] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8320 |
LSV, 10р это что за число такое? 5 пишем, 7 на ум пошло? Если это строка представляет собой число, то оно явно не атомарно и требует выполнения правил данных для отношения, то есть превращено в атомарный вид при загрузке. "Проскакивать" и "потом как-нибудь" при работе с данными нельзя, черный жирный крест. |
2 июн 17, 16:12 [20535467] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
|
||
2 июн 17, 16:38 [20535555] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31782 |
Да, а 50р.47коп. плавно превратятся в 5047 рублей :-) |
||
3 июн 17, 00:24 [20536419] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |