/ (деление) (Transact-SQL)
Выполняет деление одного числа на другое (арифметический оператор деления).
Синтаксис
dividend / divisor
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
dividend
Делимое числовое выражение. dividend может быть любым допустимым выражением expression любого из типов категории числовых типов данных, кроме типов данных datetime и smalldatetime.
divisor
Числовое выражение, на которое делится делимое. divisor может быть любым допустимым выражением любого из типов категории числовых типов данных, кроме типов данных datetime и smalldatetime.
Типы результата
Возвращает результат типа данных аргумента с более высоким приоритетом. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
Если целочисленный аргумент dividend делится на целочисленный аргумент divisor, то результатом будет целое число, а дробная часть будет усечена.
Замечания
Фактическое значение, возвращаемое оператором /, представляет собой частное от деления первого выражения на второе.
Примеры
В следующем примере используется арифметический оператор деления для вычисления целевого показателя продаж в месяц для сотрудников по продажам в Adventure Works Cycles.
-- Uses AdventureWorks SELECT s.BusinessEntityID AS SalesPersonID, FirstName, LastName, SalesQuota, SalesQuota/12 AS 'Sales Target Per Month' FROM Sales.SalesPerson AS s JOIN HumanResources.Employee AS e ON s.BusinessEntityID = e.BusinessEntityID JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID;
Здесь приводится частичный результирующий набор.
SalesPersonID FirstName LastName SalesQuota Sales Target Per Month ------------- ------------ ----------------- ----------- ------------------ 274 Stephen Jiang NULL NULL 275 Michael Blythe 300000.00 25000.00 276 Linda Mitchell 250000.00 20833.3333 277 Jillian Carson 250000.00 20833.3333
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
В приведенном ниже примере арифметический оператор деления служит для вычисления отношения часов отпуска к часам отсутствия по болезни для каждого сотрудника.
-- Uses AdventureWorks SELECT FirstName, LastName, VacationHours/SickLeaveHours AS PersonalTimeRatio FROM DimEmployee;
Функция STRING_SPLIT
Функция STRING_SPLIT выполняет операцию, обратную STRING_AGG . Она принимает на входе символьную строку и разбивает её на подстроки по заданному вторым параметром разделителю. Эти подстроки формируют значения унарной таблицы. К единственному столбцу этой таблицы можно обратиться по имени value .
Фактически функция STRING_SPLIT играет роль нестандартного конструктора одностолбцовой таблицы. Стандартная альтернатива выглядит так:
Консоль
Выполнить
Надо в SQL разбить строку на подстроки
Научите, пожалуйста, как с помощью SQL разбить строку на подстроки. В таблице есть несколько полей со сложной текстовой информацией (адрес, записанный через запятые, типа «Москва, ул. Реутовская 8 к3, кв. 93» и другие подобные данные). Надо в MS SQL разбить строку по заданному разделителю (в данном случае запятая). Пробовал искать запятые в строке с помощью CHARINDEX, но не могу сделать так, чтобы SQL разбивал строку на слова или отдельные части, если там несколько запятых. Как это можно сделать? Может, в MS Sql разбить строку на слова можно какой-то уже готовой функцией?
Как разделить строку в sql на разные столбцы
Подскажите, пожалуйста, как в sql можно распарсить строку по конкретному разделителю и записать полученные части в разные столбцы. У меня есть строка: ‘16001=4,16002=4,16003=4,16005=1,16007=3’ .
Нужно реализовать что-то в роде таблицы (номер, значение: 16001, 4) . Я понял что через STRING_SPLIT можно разделить на строки по символу , . В итоге полученный результат можно прогнать через цикл, где строку 16001=4 разделить на 16001 и 4 . В этом у меня проблема. Подскажите, пожалуйста, как можно это реализовать. Использую SQL Server Management Studio 18.7. Сейчас я имею функцию, на которую подаю строку и получаю табличное значение:
CREATE FUNCTION [dbo].[ConvertStringToTable](@inputString NVARCHAR(400)) RETURNS @tabl TABLE(value NVARCHAR(100)) AS BEGIN INSERT @tabl SELECT value FROM STRING_SPLIT(@inputString, ',') WHERE RTRIM(value) <> '' RETURN END
Отслеживать
28.9k 5 5 золотых знаков 28 28 серебряных знаков 55 55 бронзовых знаков
задан 7 мар 2021 в 14:42
Максим Мартыненко Максим Мартыненко
35 1 1 серебряный знак 5 5 бронзовых знаков
Какую именно СУБД используете? В разных СУБД есть разные возможности.
7 мар 2021 в 15:00
СУБД в общем случае недостаточно, нужна to и точная версия.\
7 мар 2021 в 16:29
Использую SQL Server Management Studio 18.7
7 мар 2021 в 16:46
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
select left(value,charindex('=',value)-1), SUBSTRING(value,charindex('=',value)+1,len(@inputString)) from string_split(@inputString,',')
Отслеживать
ответ дан 7 мар 2021 в 17:12
Sergey Moiseenko Sergey Moiseenko
1,066 1 1 золотой знак 7 7 серебряных знаков 7 7 бронзовых знаков
Похоже это оно! Спасибо!
7 мар 2021 в 17:52
Версия SSMS не имеет значения.
Чтобы получить версию SQL Server, введите следующую команду:
SELECT @@VERSION;
Вот несколько более эффективный метод, потому что он вычисляет позицию знака равенства только один раз для пары ключ/значение.
DECLARE @inputString VARCHAR(MAX) = '16001=4,16002=4,16003=4,16005=1,1600770=3'; SELECT LEFT(value, t.pos - 1) AS [key], RIGHT(value, LEN(value) - t.pos) AS [value] FROM STRING_SPLIT(@inputString, ',') CROSS APPLY (SELECT pos = CHARINDEX('=',value)) AS t;
Результат
+---------+-------+ | key | value | +---------+-------+ | 16001 | 4 | | 16002 | 4 | | 16003 | 4 | | 16005 | 1 | | 1600770 | 3 | +---------+-------+
