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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Часть структуры:
    create_date varchar(20) utf8_general_ci
    off_date      varchar(20) utf8_general_ci
    Выборка:
    source_id, service_id,                name,                       description,         create_date, off_date, default, active, order
                0,              6,  Без источника,  Источник по умолчанию, 20130807133236,           '',         1,        1,       0

    Бльоооооооо!!!!!!

    deep, 26 Февраля 2016

    Комментарии (2)
  2. SQL / Говнокод #19436

    +4

    1. 1
    2. 2
    select street, number, name,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(phones, '?', ''),'+7','8'),')',''),'(',''),' ','') as phone
    from person

    Есть еще варианты? )

    indigogodman, 12 Февраля 2016

    Комментарии (21)
  3. SQL / Говнокод #19428

    −2

    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
    DECLARE @a int;
    Set @a =0;
    
    SELECT a,b,
    
    @a = CASE b
    WHEN '2m' THEN 60
    WHEN '1m' THEN 30
    WHEN '15d' THEN 15
    END
    FROM table1
    
    Where b<= dateadd (day,@a,getdate());

    Подскажите пожалуйста:

    Есть 2 столбца "a" и "b"

    Столбец "a" содержит строковое значение (2m,1m,15d(60 дней, 30 дней, 15 дней))

    Столбец "b" содержит дату

    Необходимо к столбцу "b" прибавить столбец "a" и получить дату(например стобец "b" содержит дату 01.01.2016, а стобец "a" содержит "15d" должно получиться 16.01.2016), но я совсем запутался с кодом.

    dernar, 10 Февраля 2016

    Комментарии (39)
  4. SQL / Говнокод #19415

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    select 
       (select name from dbo.Product where ID = @id) as name, 
       (select sh_name from dbo.Product where ID = @id) as sh_name, 
       (select type from dbo.Product where ID = @id) as type,
       (select description from dbo.Product where ID = @id) as description, 
       (select count(*) from dbo.ProductSales ps join  dbo.Product p on p.ID=ps.ID_PRODUCT where ID = @id) as product_sales
    ..............
    и т.д.
    думаю смысл понятен)

    Офигенный способ выбора данных из таблиц(ы). Да-да Sql бывает и таким :)

    Onimys, 08 Февраля 2016

    Комментарии (4)
  5. SQL / Говнокод #19369

    0

    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
    update t set
    t.[TYPE] = @type
    from dbo.ITEM t
    where @id = t.ID
    
    update t set
    t.NAME = @name
    from dbo.ITEM t
    where @id = t.ID
    
    update t set
    q.CATEGORY = @category
    from dbo.ITEM t
    where @id = t.ID
    
    update t set
    t.[COUNT] = @count
    from dbo.ITEM t
    where @id = t.ID
    
    update t set
    t.SUMMA = @summa_cost
    from dbo.ITEM t
    where @id = t.ID
    
    ...
    и так далее полотно для 40 полей)))

    Представляю Вам ХП по обновлению полей таблицы. Вот это реализация =)

    Onimys, 29 Января 2016

    Комментарии (6)
  6. SQL / Говнокод #19360

    +1

    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
    select row_idx.row,row_idx.row_name,
           sum(
           case
              when exists(select R_USERS_DOLGN.ID_REC
                          from R_USERS_DOLGN
                          where R_USERS_DOLGN.USER_ID = USERS.ID_USER) then 1
              else 0
            end) SHTAT,
    ---и так далее---
    ---...---
            sum(
            case
              when exists(select R_USERS_DOLGN.ID_REC
                              from R_USERS_DOLGN
                              where R_USERS_DOLGN.USER_ID = USERS.ID_USER) and TAB_PLACE.TYPE_PLACE in (2, 3) then 1
              else 0
            end) STACZAN_v from USERS
     left outer join R_USERS_DOLGN on R_USERS_DOLGN.user_id = USERS.id_user
     left outer join SPR_DOLGN on  SPR_DOLGN.ID_DOLGN=R_USERS_DOLGN.DOLGN_ID  and
           R_USERS_DOLGN.LPID = USERS.LPID and 
           R_USERS_DOLGN.BEG_WORK <= :O_BEG and 
           R_USERS_DOLGN.END_WORK >= :O_END 
     join TAB_PRVD on TAB_PRVD.ID_PRVD= SPR_DOLGN.PRVD_ID
     right outer join (select 1 row,'Врачи – всего' row_name from rdb$database 
           union select 2 row,'Специалисты с высшим немедицинским образованием (т.1100 стр.122)' row_name from rdb$database
           union select 3 row,'Средний медперсонал – всего (т.1100 стр.128)' row_name from rdb$database
           union select 4 row,'Провизоры (т.1100 стр.175)' row_name from rdb$database
           union select 5 row,'Фармацевты (т.1100 стр.176)' row_name from rdb$database
           union select 6 row,'Младший медперсонал (т.1100 стр.177)' row_name from rdb$database
           union select 7 row,'Прочий персонал (т.1100 стр.179)' row_name from rdb$database
           union select 8 row,'Всего должностей (т.1100 стр.184)' row_name from rdb$database) row_idx
       on     (row_idx.row=1 and (spr_dolgn.group_dolgn=1))
           or (row_idx.row=2 and ', '||(select first (1) spec_list 
                   from spr_mkb_group_tabl_spec where num_pp=122)||',' like '%, '||tab_prvd.id_prvd||',%')
           or (row_idx.row=3 and (spr_dolgn.group_dolgn=2))
           or (row_idx.row=4 and (tab_prvd.id_prvd in (3,6,111,112,5003,5004,5005)))
           or (row_idx.row=5 and (spr_dolgn.id_dolgn=307))
           or (row_idx.row=6 and (spr_dolgn.group_dolgn=3))
           or (row_idx.row=7 and (spr_dolgn.group_dolgn=4))
           or (row_idx.row=8)
     left outer join TAB_PLACE on TAB_PLACE.ID_PLACE = R_USERS_DOLGN.PODR_ID
     where USERS.LPID = '+inttostr(LPU_CURRENT_ID)+
            ' group by 1,2

    Что-то меня накрыло. Вообще-то для таких вещей у нас тут есть отдельная таблица. В крайнем случае можно было сделать временную таблицу.

    tucvbif, 28 Января 2016

    Комментарии (5)
  7. SQL / Говнокод #19358

    +10

    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
    select
     distinct
        P.CART_ID,
        sum(P.COST) COST,
        cast(P.BUY_DATE as date) BUY_DATE,
        '[' || U.ID || '] ' || U.FAM || ' ' || U.NAME || ' ' || U.VATHERNAME UNAME,
     
    
        list(coalesce((select
                           USERS.NAME
                       from
                           USERS
                       where
                           USERS.ID = C.USERID), 'System') || '(' || C.DATETIME || ') - ' || C.comment, ascii_char(10))
     from
        PRODUCTS_HISTORY P
    right join
        PARTNERS U on U.ID = P.USERID
    join
        COMMENTS C on C.PRODUCTID = P.CART_ID
    where
       -- P.CART_ID is not null and
                p.cart_id = 11888
    group by 1, 3, 4

    Аккуратненький запросик.. Но почему-то он в листе c.comment умножает на p.cart_id.

    Rijen, 28 Января 2016

    Комментарии (4)
  8. SQL / Говнокод #19352

    0

    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
    use [oktell]
    select 
    	(case when SUBSTRING([Call_status_note],1,1)='1' 
    	then 'Расписание специалиста, '	else ''	end)
    	+(case when SUBSTRING([Call_status_note],2,1)='1' 
    	then 'Стоимость услуг, ' else '' end)
    	+(case when SUBSTRING([Call_status_note],3,1)='1' 
    	then 'Адрес, ' 	else '' end)
    	+(case when SUBSTRING([Call_status_note],4,1)='1' 
    	then 'Вакцина, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],5,1)='1' 
    	then 'Эл.почта, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],6,1)='1' 
    	then 'Перевод звонка в офис и др., 'else '' end)
    	+(case when SUBSTRING([Call_status_note],7,1)='1' 
    	then 'Стоматология, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],8,1)='1' 
    	then 'Неверная информация, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],9,1)='1' 
    	then 'Ведение беременности, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],10,1)='1' 
    	then 'Услуги, операции, анализы, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],11,1)='1' 
    	then 'Вопросы скорой помощи, 'else '' end)
    	+(case when SUBSTRING([Call_status_note],12,1)='1' 
    	then 'Звонок сорвался, 'else '' end) [Заметка]
    from [dbo].[AbonentsMedPark]

    Потребовали максимально быстро реализовать функциолнал. Есть текстовое поле вида "111111000000", надо по флагам вывести текст.
    Конкретно с самим MSSQL работал мало. Я предлагал использовать функцию, мне отказали. Возможно ли реализовать этот запрос более оптимально?

    Rijen, 27 Января 2016

    Комментарии (18)
  9. SQL / Говнокод #19338

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    BEGIN
    	DECLARE CloneID INTEGER DEFAULT 0;
      SET CloneID = (SELECT `id` FROM `users` WHERE (`level` >= ulvl) and (`level`<= ulvl + 2) and (`id`<>uid) ORDER BY RAND() LIMIT 0,1);
      RETURN IFNULL(CloneID,0);
    END

    Получения рандомного идентификатора по двум условиям, жесть то какая. Но лучше я пока не придумал.

    Cynicrus, 20 Января 2016

    Комментарии (1)
  10. SQL / Говнокод #19322

    +1

    1. 1
    AND (T.KATEGORY IN(0,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.........86575,86576,86577,86578,86579,86580,86581,86582,86583,86584,86585,86586,86587,86588))

    Это не специально для сайта, это из работающего нечто - то место, где много точек реально заполнено именно так, как подсказывает логика глядя на начало и конец последовательности. Увы, сей сайт не позволяет сполна насладиться всей эстетичностью данного кода ограничивая красоту жалкими 6 тыс. символов...

    Kommanch, 18 Января 2016

    Комментарии (5)