- 1
SELECT LAST_INSERT_ID() FROM comments;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−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/
−163
ALTER PROCEDURE [dbo].[prodam_Получить_Начисления_По_ЛС]
@кодЛС uniqueidentifier,
@дата date,
@источникНачислений nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
IF @источникНачислений = 'AccountCharge_Lain'
BEGIN
SELECT
CAST(MONTH(@дата) as nvarchar(2))+'.'+CAST(YEAR(@дата) as nvarchar(4)) as 'Расчетный период'
,ach.ID as 'Начисление'
,suc.Title as 'Услуга'
,ach.[Formula] as 'Формула'
,ach.[FormulaWithValues] as 'Формула со значениями'
,CAST(ach.[SumOfPaymentEnteredTheLastMonth] as decimal(19,2)) as 'Оплаты поступившие в предыдущем месяце (руб.)'
,CAST(ach.[SumOfRecalculationForTheLastMonth]as decimal(19,2)) as 'Перерасчет за предыдущий период (руб.)'
,CAST(ach.[SumOfDebtOrOverpayment]as decimal(19,2)) as 'Долг (+), переплата (-) (руб.)'
,um.Title as 'Единица измерения (по нормативу / приборам учета)'
,CAST(ach.[SumOfTariffForUnitOfService]as decimal(19,2)) as 'Тариф за единицу услуги (руб.)'
,CAST(ach.[SumOfChargeForMonthUnderTheTariff]as decimal(19,2)) as 'Начислено за месяц по тарифу (руб.)'
,CAST(ach.[SumOfShortShipmentOfService]as decimal(19,2)) as 'Сумма недопоставки (руб.)'
,CAST(ach.[SumOfPaymentInViewOfShortShipment]as decimal(19,2)) as 'Начислено к оплате с учетом недопоставки (руб.)'
,CAST(ach.[AmountOfDaysOfShortShipmentOfService]as decimal(19,2)) as 'Недопоставка услуг (дней)'
,suc.ID as 'ID'
FROM
[RegionDBNew].[dbo].Account acc
INNER JOIN [RegionDBNew].[dbo].[AccountCharge_Lain] ach ON
ach.CalculationYear = YEAR(@дата) AND
ach.CalculationMonth = MONTH(@дата) AND
ach.AccountID = acc.ID
LEFT JOIN [RegionDBNew].[dbo].UnitOfMeasure um ON ach.[UnitOfMeasureID] = um.ID
LEFT JOIN [RegionDBNew].[dbo].[ServiceUnderAccount] suc ON suc.ID = ach.ServiceUnderAccountID
WHERE
acc.ID = @кодЛС
ORDER BY
suc.Title;
END
ELSE IF @источникНачислений = 'AccountCharge_Prodam'
BEGIN
SELECT
CAST(MONTH(@дата) as nvarchar(2))+'.'+CAST(YEAR(@дата) as nvarchar(4)) as 'Расчетный период'
,ach.ID as 'Начисление'
,suc.Title as 'Услуга'
,ach.[Formula] as 'Формула'
,ach.[FormulaWithValues] as 'Формула со значениями'
,CAST(ach.[SumOfPaymentEnteredTheLastMonth] as decimal(19,2)) as 'Оплаты поступившие в предыдущем месяце (руб.)'
,CAST(ach.[SumOfRecalculationForTheLastMonth] as decimal(19,2)) as 'Перерасчет за предыдущий период (руб.)'
,CAST(ach.[SumOfDebtOrOverpayment] as decimal(19,2)) as 'Долг (+), переплата (-) (руб.)'
,um.Title as 'Единица измерения (по нормативу / приборам учета)'
,CAST(ach.[SumOfTariffForUnitOfService] as decimal(19,2)) as 'Тариф за единицу услуги (руб.)'
,CAST(ach.[SumOfChargeForMonthUnderTheTariff] as decimal(19,2)) as 'Начислено за месяц по тарифу (руб.)'
,CAST(ach.[SumOfShortShipmentOfService] as decimal(19,2)) as 'Сумма недопоставки (руб.)'
,CAST(ach.[SumOfPaymentInViewOfShortShipment] as decimal(19,2)) as 'Начислено к оплате с учетом недопоставки (руб.)'
,CAST(ach.[AmountOfDaysOfShortShipmentOfService] as decimal(19,2)) as 'Недопоставка услуг (дней)'
,suc.ID as 'ID'
FROM
[RegionDBNew].[dbo].Account acc
INNER JOIN [RegionDBNew].[dbo].[AccountCharge_Prodam] ach ON
ach.CalculationYear = YEAR(@дата) AND
ach.CalculationMonth = MONTH(@дата) AND
ach.AccountID = acc.ID
LEFT JOIN [RegionDBNew].[dbo].UnitOfMeasure um ON ach.[UnitOfMeasureID] = um.ID
LEFT JOIN [RegionDBNew].[dbo].[ServiceUnderAccount] suc ON suc.ID = ach.ServiceUnderAccountID
WHERE
acc.ID = @кодЛС
ORDER BY
suc.Title;
END
ELSE IF @источникНачислений = 'AccountCharge'
BEGIN
SELECT
CAST(MONTH(@дата) as nvarchar(2))+'.'+CAST(YEAR(@дата) as nvarchar(4)) as 'Расчетный период'
,ach.ID as 'Начисление'
,suc.Title as 'Услуга'
,ach.[Formula] as 'Формула'
,ach.[FormulaWithValues] as 'Формула со значениями'
,CAST(ach.[SumOfPaymentEnteredTheLastMonth] as decimal(19,2)) as 'Оплаты поступившие в предыдущем месяце (руб.)'
,CAST(ach.[SumOfRecalculationForTheLastMonth] as decimal(19,2)) as 'Перерасчет за предыдущий период (руб.)'
,CAST(ach.[SumOfDebtOrOverpayment] as decimal(19,2)) as 'Долг (+), переплата (-) (руб.)'
,um.Title as 'Единица измерения (по нормативу / приборам учета)'
,CAST(ach.[SumOfTariffForUnitOfService] as decimal(19,2)) as 'Тариф за единицу услуги (руб.)'
,CAST(ach.[SumOfChargeForMonthUnderTheTariff] as decimal(19,2)) as 'Начислено за месяц по тарифу (руб.)'
,CAST(ach.[SumOfShortShipmentOfService] as decimal(19,2)) as 'Сумма недопоставки (руб.)'
,CAST(ach.[SumOfPaymentInViewOfShortShipment] as decimal(19,2)) as 'Начислено к оплате с учетом недопоставки (руб.)'
,CAST(ach.[AmountOfDaysOfShortShipmentOfService] as decimal(19,2)) as 'Недопоставка услуг (дней)'
,suc.ID as 'ID'
FROM
[RegionDBNew].[dbo].Account acc
INNER JOIN [RegionDBNew].[dbo].[AccountCharge] ach ON
ach.CalculationYear = YEAR(@дата) AND
ach.CalculationMonth = MONTH(@дата) AND ach.CalculationMonth = MONTH(@дата) AND
ach.AccountID = acc.ID
LEFT JOIN [RegionDBNew].[dbo].UnitOfMeasure um ON ach.[UnitOfMeasureID] = um.ID
LEFT JOIN [RegionDBNew].[dbo].[ServiceUnderAccount] suc ON suc.ID = ach.ServiceUnderAccountID
WHERE
acc.ID = @кодЛС
ORDER BY
suc.Title;
END
−167
SELECT
slave.*,
-- ...
FROM
(SELECT * FROM driver WHERE id = '$driverID') as slave
LEFT JOIN
-- ...
Отыскал в работающем проекте
−161
create temp table data (id serial, o1 money(16,2) default 0, o2 money(16,2) default 0,
o3 money(16,2) default 0, o4 money(16,2) default 0, o5 money(16,2) default 0,
o6 money(16,2) default 0, o7 money(16,2) default 0, o8 money(16,2) default 0,
o9 money(16,2) default 0, o10 money(16,2) default 0, o11 money(16,2) default 0,
o12 money(16,2) default 0, o13 money(16,2) default 0, o14 money(16,2) default 0,
o15 money(16,2) default 0, o16 money(16,2) default 0, o17 money(16,2) default 0,
o18 money(16,2) default 0, o19 money(16,2) default 0, o20 money(16,2) default 0,
o21 money(16,2) default 0, o22 money(16,2) default 0, o23 money(16,2) default 0,
o24 money(16,2) default 0, o25 money(16,2) default 0, o26 money(16,2) default 0,
o27 money(16,2) default 0, o28 money(16,2) default 0, o29 money(16,2) default 0,
o30 money(16,2) default 0, o31 money(16,2) default 0, f1 money(16,2) default 0,
f2 money(16,2) default 0, f3 money(16,2) default 0, f4 money(16,2) default 0,
f5 money(16,2) default 0, f6 money(16,2) default 0, f7 money(16,2) default 0,
f8 money(16,2) default 0, f9 money(16,2) default 0, f10 money(16,2) default 0,
f11 money(16,2) default 0, f12 money(16,2) default 0, f13 money(16,2) default 0,
f14 money(16,2) default 0, f15 money(16,2) default 0, f16 money(16,2) default 0,
f17 money(16,2) default 0, f18 money(16,2) default 0, f19 money(16,2) default 0,
f20 money(16,2) default 0, f21 money(16,2) default 0, f22 money(16,2) default 0,
f23 money(16,2) default 0, f24 money(16,2) default 0, f25 money(16,2) default 0,
f26 money(16,2) default 0, f27 money(16,2) default 0, f28 money(16,2) default 0,
f29 money(16,2) default 0, f30 money(16,2) default 0, f31 money(16,2) default 0,
ftot money(16,2) default 0)
... must be funny in the rich man's world ...