1. SQL / Говнокод #12742

    −167

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    declare @billing_types table(k int null, t varchar(14)
    	collate SQL_Latin1_General_CP1255_CI_AS)
    insert @billing_types 
    values (1, 'אשרי')
    	   ,(2, 'צ׳ק')
    	   ,(3, 'הוראת קבע')
    
    declare @standing_order_status table(i int null, s varchar(14)
    	collate SQL_Latin1_General_CP1255_CI_AS)
    insert @standing_order_status 
    values (4, 'מבותל')
    	   ,(3, 'לא מאושר')
    	   ,(2, 'ממתין')
    	   ,(1, 'מאושר')
    
    declare @fax varchar(20)
    
    select billing_company_id
          ,internal_company_name
    	  ,isnull(t, 'לא פעיל') collate SQL_Latin1_General_CP1255_CI_AS as payment_type_string
          ,case when company_email is null then ''
    			when replace((ltrim(rtrim(company_email))), '0', '') = '' then ''
    			-- some emails were imported in the way, they aren't valid
    			when charindex('@', company_email) = 0 then ''
    			else (ltrim(rtrim(company_email))) end as email
          ,case when replace(ltrim(rtrim(company_fax)), '0', '') = '' 
    			then ''
    	   		when -- some times there are words like "none", "n/a" etc. in there
    			replace(replace(replace(replace(replace(replace(replace(
    				replace(replace(replace(replace(ltrim(rtrim(company_fax)), '-', ''), 
    				'0', ''), '1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''),
    				'7', ''), '8', ''), '9', '') != '' 
    			then ''
    			else replace(ltrim(rtrim(company_fax)), '-', '')
    		end as c_fax
          ,ltrim(rtrim(company_address)) as c_address
          ,ltrim(rtrim(cast(company_comments as varchar(1000)))) as c_comments
          ,invoice_send_with_details
          ,invoice_send_fax
          ,invoice_print
          ,ltrim(rtrim(cc_name)) as c_name
          ,ltrim(rtrim(cc_number)) as c_number
          ,ltrim(rtrim(cc_cvv)) as c_cvv
          ,ltrim(rtrim(cc_id)) as c_id
          ,ltrim(rtrim(cc_expire)) as c_expire
          ,ltrim(rtrim(bank_number)) as number
          ,ltrim(rtrim(bank_branch)) as branch
          ,ltrim(rtrim(bank_account)) as account
          ,bank_hoshen
    	  ,isnull(s, 'אין') collate SQL_Latin1_General_CP1255_CI_AS as order_status
    from billing_companies
    left join @billing_types bt on bt.k = payment_type
    left join @standing_order_status os on os.i = bank_standing_order_status

    Война. Экспорт в Эксель, для того, чтобы потом ее обратно, но уже другим людям в базу передать.
    Из интересных подробностей. Поле "факс" в базе имеет тип varchar(50), например. Никакой серверной валидации отродясь не было. Иногда люди просто путали факс и электорпочту, когда заполняли данные.

    Запостил: wvxvw, 13 Марта 2013

    Комментарии (15) RSS

    • ЗЫ.
      patindex('%[^0-9-]%', ltrim(rtrim(company_fax))) != 0

      уже нашел.
      Ответить
    • Множественные реплейсы всегда были хороши.
      Ответить
    • Явно указывают коллейшены - значит они в БД отличаются от тех, что в коде? О_о
      הו חרא
      Ответить
      • Из бд они раньше извлекались посреством Base64...
        Ответить
    • Когда же вы, наконец, поймете, что (SQL - это язык структурированных запросов к базе даных) микроволновка убивает быстрее, чем пуля! Не скажу, чтобы я так уж правильно питался, но эту дрянь я есть не стану!
      Ответить
      • Не смотря на то, что он именно так и называется, это не совсем справедливое название, т.как он ровно в такой же степени выполняет функции data definition.
        Но тут есть еще один момент: этот код готовился для использования с bcp, т.е. нужно лучить данные в правильном виде без необходимости последующей доработки.
        А кроме того, есть еще и такое обстоятельство: это уже чисто теоретический вопрос, но тем не менее. Мне, возможно, не хватает опыта, чтобы судить, но пока что у меня складывается впечатление, что лучше, когда данные максимально строго обрабатываются на уровне базы данных, а не на уровне приложения, работающего с базой данных. Чтобы данные строже обработать нужно больше возможностей. Тех же регулярных выражений, работы с коллекциями, возможности использовать известные алгоритмы и идиомы из других областей программирования - а для этого нужны функции, переменные, циклы и т.п. Т.е. на мой взгляд, лучше потрудиться и написать триггер / констрейнт, который будет следить за правильностью данных, чем полагаться на приложение, работающее с базой в том, что оно не допустит неправильный ввод.
        Ответить
    • Таки кошегный код.
      Ответить
    • >values (1, 'אשרי')
      Это же кто так пишет?
      Нужно писать אשראי
      >Никакой серверной валидации отродясь не было.
      А может она по идее должна была производиться на клиенте до отсылки на сервер, но по каким-то причинам ее потеряли.
      Ответить
      • Это "разрешить", а не "кредитка" (наверное, хз, уже не помню). Кстати, тоже тема была, меня потом заставили все глаголы в сослогательные наклонении переделать в мужской род (хотя в конторе только девушки работают)
        Ответить
        • Слово, которое написано - "разреши", но поскольку это один из видов оплаты, то по идее должна быть кредитная карточка.
          insert @billing_types // виды оплаты
          values (1, 'אשרי') // а тут по идее кредитка должна быть
          ,(2, 'צ׳ק') // чек
          ,(3, 'הוראת קבע') // постоянное распоряжение банку
          >заставили все глаголы в сослогательные наклонении переделать в мужской род
          Ну, в документации обычно все в мужском роде используется.
          Ответить
          • Да нет, вобщем... а даже если бы и было. Есть же здравый смысл и просто человеческое уважение. Мне было бы не приятно, если бы лично ко мне в женском роде обращались, если это не в шутку.

            Я этот текст по кусочкам копировал из разных мест. Не факт, что оно все однородное / имеет смысл. Кроме того, я просто не ставлю никогда иврит - избавляет от такого количества головной боли, что даже не верится. Текст копировался откуда-то. Меня угнетает даже не столько разбирать эти закорючки, сколько никогда не работающее выравнивание / форматирование / цифры / пунктуация и т.д.
            Слава богу по-работе сейчас мне никогда его ни читать ни писать не нужно, но увы нужно будет сдавать на диплом...
            Ответить
            • Ну сам по себе он не сложный язык, а вот в отношении форматирования - вы правы на 100%. Отформатировать иврит внутри той же разметки html - легче просто застрелиться.
              Ответить
              • Я уже учил семь лет историю украинской литературы. Но иврит может с этим поспорить в смысле бесполезности. Меня не сложность смущает, а то, что если я все-таки решу получить этот диплом - это как минимум 5 курсов по семестру каждый какого-то фантастического бреда, с которым потом жить.
                Ответить
                • Ну в отношении бесполезности - это уже вам решать нужен он вам или нет. Если вы собираетесь оставаться в Израиле на всю оставшуюся жизнь, то несомненно он нужен.
                  Ответить
                  • Да тоже как-бы нет... я отучился тут три года, и не сдал ни одной бумаги на иврите. По-моему это вообще безумие искать материал по математике, или программированию на этом языке. Да и по любому другому предмету, кроме изучения писания :)
                    По работе - вот это был единственный раз, когда требовалось что-то сделать на иврите (я там больше не работаю). Все более-менее серьезное программирование, которое есть в этой маленькой но гордой стране работает на англоязычный рынок. Тут просто без вариантов - никакого иврита. Конторки которые работают на внутренний рынок - жалкое зрелище. Во всех отношениях.
                    Читать местную прессу? - так это ж просто убожество...
                    Литература на иврите? Кино? - просто смешно.
                    В то же время, практически везде в той или иной мере можно обойтись английским.
                    Но, как бы да... в проекте попрощаться с маленькой но гордой и податься куда подальше от религиозных мудаков всяких расцветок, армейского режима и национального характера. Одно только опасение, что национальный характер может оказаться заразительным.
                    Ответить

    Добавить комментарий