- 1
- 2
- 3
- 4
- 5
CREATE TABLE blah (
...
status ENUM('1', '2', '3') NOT NULL COMMENT "Статус модерации",
...
);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−161
CREATE TABLE blah (
...
status ENUM('1', '2', '3') NOT NULL COMMENT "Статус модерации",
...
);
Модерация на раз-два-три.
−158
update "Employee"."Jobs" set "default_group_id" = '1' where "id" in (select "id" from "Employee"."Jobs" where title like '%родавец%');
update "Employee"."Jobs" set "default_group_id" = '2' where "id" in (select "id" from "Employee"."Jobs" where title like '%правляющ%');
update "Employee"."Jobs" set "default_group_id" = '3' where "id" in (select "id" from "Employee"."Jobs" where title like '%лиент%');
update "Employee"."Jobs" set "default_group_id" = '4' where "id" in (select "id" from "Employee"."Jobs" where title like '%клад%' and title not like '%борщиц%');
like '%клад% должен был включать всяких "работников склада" и "замзавсклада", но туда попала также и "уборщица склада" - пришлось заводить второе условие
−165
delete
from liaison
where
type = 'UsersGroup' and
`group` = 'static_' || (select id from usergroup where name = :grp)
Час назад вынес этим запросом все связи между группами и юзерами в боевой базе ;)
P.S. Почему в mysql все дерьмо, работающее совсем не так, как оно работает почти во всех остальных СУБД, включено по умолчанию?
−164
SELECT LAST_INSERT_ID() FROM comments;
Подозреваю, что баян, но найти в чистом виде здесь не смог. Номинант на звание самого короткого анекдота на SQL.
−163
$query = $sql -> query("SELECT *, COUNT(`id`) as count FROM `d_download` WHERE `id` = '{$id}'", true);
if($query['count'] == 1) {
// code
}
Проверка, что значение найдено.
−167
update sometable
set value2=convert(char(100), @int_variable+convert(int,value2))
where someconditions
В цикле колбасится, упростил для понимания.
Мне кажется эту штуку изначально проектировал человек, который работал с bash и sqlite, а потом оппа, и нет слабой типизации.
−167
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), например. Никакой серверной валидации отродясь не было. Иногда люди просто путали факс и электорпочту, когда заполняли данные.
−166
IFNULL(sum(r.value), 0)/ IF(count(r.value) <> 0, count(r.value), 1) as rating
А как вы считаете среднее арифметическое?
−169
DECLARE @IsPerson BIT
,@ContactTypeID INT
SET @ContactTypeID = CASE WHEN @IsPerson = 0 THEN 3 ELSE 4 END
IF (LEN(ISNULL(@FirstName,'')) <= 0 AND LEN(ISNULL(@LastName,'')) <= 0 AND (LEN(@EntityName) > 0 OR LEN(@TradingAs) > 0))
BEGIN
SET @IsPerson = 0
END
ELSE
BEGIN
SET @IsPerson = 1
END
Такая себе Stored Procedure...
Magic numbers - это всё фигня. Меня всегда интересовало, почему тип контакта всегда 4?
И, да, строки идут именно в такой очерёдности.
−162
/*здесь было много кода*/
DECLARE @Strings TABLE /* in this temporary table we keep all strings, even the names of the elements, since they are 'escaped' in a different way, and may contain, unescaped, brackets denoting objects or lists. These are replaced in the JSON string by tokens representing the string */
(
String_ID INT IDENTITY(1, 1),
StringValue NVARCHAR(MAX)
)
SELECT--initialise the characters to convert hex to ascii
@characters='0123456789abcdefghijklmnopqrstuvwxyz',
/* firstly we process all strings. This is done because [{} and ] aren't escaped in strings, which complicates an iterative parse. */
@parent_ID=0;
WHILE 1=1 --forever until there is nothing more to do
BEGIN
SELECT
@start=PATINDEX('%[^a-zA-Z]["]%', @json collate SQL_Latin1_General_CP850_Bin);--next delimited string
IF @start=0 BREAK --no more so drop through the WHILE loop
IF SUBSTRING(@json, @start+1, 1)='"'
BEGIN --Delimited Name
SET @start=@Start+1;
SET @end=PATINDEX('%[^\]["]%', RIGHT(@json, LEN(@json+'|')-@start) collate SQL_Latin1_General_CP850_Bin);
END
IF @end=0 --no end delimiter to last string
BREAK --no more
SELECT @token=SUBSTRING(@json, @start+1, @end-1)
--now put in the escaped control characters
SELECT @token=REPLACE(@token, FROMString, TOString)
FROM
(SELECT
'\"' AS FromString, '"' AS ToString
UNION ALL SELECT '\\', '\'
UNION ALL SELECT '\/', '/'
UNION ALL SELECT '\b', CHAR(08)
UNION ALL SELECT '\f', CHAR(12)
UNION ALL SELECT '\n', CHAR(10)
UNION ALL SELECT '\r', CHAR(13)
UNION ALL SELECT '\t', CHAR(09)
) substitutions
SELECT @result=0, @escape=1
--Begin to take out any hex escape codes
WHILE @escape>0
BEGIN
SELECT @index=0,
--find the next hex escape sequence
@escape=PATINDEX('%\x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]%', @token collate SQL_Latin1_General_CP850_Bin)
IF @escape>0 --if there is one
BEGIN
WHILE @index<4 --there are always four digits to a \x sequence
BEGIN
SELECT --determine its value
@result=@result+POWER(16, @index)
*(CHARINDEX(SUBSTRING(@token, @escape+2+3-@index, 1),
@characters)-1), @index=@index+1 ;
END
-- and replace the hex sequence by its unicode value
SELECT @token=STUFF(@token, @escape, 6, NCHAR(@result))
END
END
--now store the string away
INSERT INTO @Strings (StringValue) SELECT @token
-- and replace the string with a token
SELECT @JSON=STUFF(@json, @start, @end+1,
'@string'+CONVERT(NVARCHAR(5), @@identity))
END
парсинг json-строки sql скриптом. полная версия тут : https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/