Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT / 22 сообщений из 22, страница 1 из 1
22.06.2020, 15:34
    #39971877
Игорь1973
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Которая UDF.
Код функции:

Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
USE [VEMZSQL]
GO
/****** Object:  UserDefinedFunction [dbo].[Format]    Script Date: 22.06.2020 15:31:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Author: Prostoysoft.ru
-- Create date: 2019-12-28
-- Description: patial analog of Access and VB 'Format' function for datetime

ALTER FUNCTION [dbo].[Format](@Date datetime, @Format varchar(50) = 'yyyy-MM-dd')
RETURNS varchar(50)
AS
BEGIN
	DECLARE @Result varchar(50)
	DECLARE @Year varchar(50)
	DECLARE @Month varchar(50)
	DECLARE @Day varchar(50)
	DECLARE @Hour varchar(50)
	DECLARE @Minute varchar(50)
	DECLARE @Second varchar(50)
	DECLARE @WeekDay varchar(50)
	DECLARE @Quarter varchar(50)
	DECLARE @MonthName varchar(50)

	SELECT @Year = YEAR(@Date)
	SELECT @Month = Month(@Date)
	SELECT @MonthName = CASE WHEN @Month=1 THEN 'Январь' WHEN @Month=2 THEN 'Февраль' WHEN @Month=3 THEN 'Март' WHEN @Month=4 THEN 'Апрель' WHEN @Month=5 THEN 'Май' WHEN @Month=6 THEN 'Июнь' WHEN @Month=7 THEN 'Июль' WHEN @Month=8 THEN 'Август' WHEN @Month=9 THEN 'Сентябрь' WHEN @Month=10 THEN 'Октябрь' WHEN @Month=11 THEN 'Ноябрь' WHEN @Month=12 THEN 'Декабрь' END
	SELECT @Day = Day(@Date)
	SELECT @Hour = DATEPART(hour, @Date)
	SELECT @Minute = DATEPART(minute, @Date)
	SELECT @Second = DATEPART(second, @Date)
	SELECT @Quarter = DATEPART(QUARTER, @Date)

	IF @Format Like 'hh_mm'
	BEGIN
		SELECT @Result = @Format
		SELECT @Result = REPLACE(@Result, 'hh', RIGHT('0' + @Hour, 2))
		SELECT @Result = REPLACE(@Result, 'mm', RIGHT('0' + @Minute, 2))
		SELECT @Result = REPLACE(@Result, 'ss', RIGHT('0' + @Second, 2))
		RETURN @Result
	END

	IF @Format Like 'hh_mm_ss'
	BEGIN
		SELECT @Result = @Format
		SELECT @Result = REPLACE(@Result, 'hh', RIGHT('0' + @Hour, 2))
		SELECT @Result = REPLACE(@Result, 'mm', RIGHT('0' + @Minute, 2))
		SELECT @Result = REPLACE(@Result, 'ss', RIGHT('0' + @Second, 2))
		RETURN @Result
	END

	IF LEN(@Format) = 16 --yyyy_MM_dd_hh_mm
	BEGIN
		SELECT @Result = LEFT(@Format, 10)
		SELECT @Result = REPLACE(@Result, 'MM', RIGHT('0' + @Month, 2))
		SELECT @Result = @Result + RIGHT(@Format, 6)
		SELECT @Result = REPLACE(@Result, 'mm', RIGHT('0' + @Minute, 2))
		SELECT @Result = REPLACE(@Result, 'yyyy', @Year)
		SELECT @Result = REPLACE(@Result, 'dd', RIGHT('0' + @Day, 2))
		SELECT @Result = REPLACE(@Result, 'hh', RIGHT('0' + @Hour, 2))
		SELECT @Result = REPLACE(@Result, 'ss', RIGHT('0' + @Second, 2))
		RETURN @Result
	END

	IF LEN(@Format) = 19 --yyyy_MM_dd_hh_mm_ss
	BEGIN
		SELECT @Result = LEFT(@Format, 10)
		SELECT @Result = REPLACE(@Result, 'MM', RIGHT('0' + @Month, 2))
		SELECT @Result = @Result + RIGHT(@Format, 9)
		SELECT @Result = REPLACE(@Result, 'mm', RIGHT('0' + @Minute, 2))
		SELECT @Result = REPLACE(@Result, 'yyyy', @Year)
		SELECT @Result = REPLACE(@Result, 'dd', RIGHT('0' + @Day, 2))
		SELECT @Result = REPLACE(@Result, 'hh', RIGHT('0' + @Hour, 2))
		SELECT @Result = REPLACE(@Result, 'ss', RIGHT('0' + @Second, 2))
		RETURN @Result
	END

	IF UPPER(@Format) LIKE '__________, DDD' --dd.MM.yyyy, DDD
	BEGIN
		SELECT @WeekDay = DATEPART(WEEKDAY, @Date) + DATEPART(WEEKDAY, 0) % 7
		SELECT @Result = LEFT(@Format, 10)
		SELECT @Result = REPLACE(@Result, 'dd', RIGHT('0' + @Day, 2))
		SELECT @Result = REPLACE(@Result, 'MM', RIGHT('0' + @Month, 2))
		SELECT @Result = REPLACE(@Result, 'yyyy', @Year)
		SELECT @WeekDay = CASE WHEN @WeekDay=1 THEN 'Вс' WHEN @WeekDay=2 THEN 'Пн' WHEN @WeekDay=3 THEN 'Вт' WHEN @WeekDay=4 THEN 'Ср' WHEN @WeekDay=5 THEN 'Чт' WHEN @WeekDay=6 THEN 'Пт' WHEN @WeekDay=7 THEN 'Сб' END
		SELECT @Result = @Result + ', ' + @WeekDay
		RETURN @Result

	END


	IF UPPER(@Format) LIKE 'MMMM[. ]YYYY' --MMMM yyyy
	BEGIN
		SELECT @Result = @Format
		SELECT @Result = REPLACE(@Result, 'MMMM', @MonthName)
		SELECT @Result = REPLACE(@Result, 'yyyy', @Year)
		RETURN @Result

	END


	IF LEN(@Format) <= 10
	BEGIN
		SELECT @Result = @Format
		SELECT @Result = REPLACE(@Result, 'yyyy', @Year)
		SELECT @Result = REPLACE(@Result, 'yy', @Year)
		SELECT @Result = REPLACE(@Result, 'MMMM', @MonthName)
		SELECT @Result = REPLACE(@Result, 'MM', RIGHT('0' + @Month, 2))
		SELECT @Result = REPLACE(@Result, 'dd', RIGHT('0' + @Day, 2))
		RETURN @Result
	END

	SELECT @Result = REPLACE(@Result, 'q', @Quarter)

	RETURN @Result
END



Из приложения вызов на скриншоте. Подскажите пжл, кто знает, что изменилось с приходом новой версии MS SQL 2019 в этом плане? И как решить проблему? Может убить пользовательскую функцию?
...
Рейтинг: 0 / 0
22.06.2020, 15:48
    #39971882
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973,

Я вот даже не знаю, смеяться или плакать от вашего вопроса.

Функция FORMAT не работает на данном поле, потому что вы её не применили к данному полю.

Вы выводите *, то есть поле как оно есть и никак его не форматируете.
...
Рейтинг: 0 / 0
22.06.2020, 15:51
    #39971884
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Во-первых, работу кода надо проверять из SSMS. А если не работает, то заняться отладкой.
Во-вторых, кто пишет запросы таким ужасным образом, должны страдать. Вот и страдайте.
В-третьих, в MSSQL 2019 уже встроена функция format.
...
Рейтинг: 0 / 0
22.06.2020, 15:51
    #39971885
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
а зачем вообще нужна вам эта функция?
...
Рейтинг: 0 / 0
22.06.2020, 15:53
    #39971886
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
a_voronin
Функция FORMAT не работает на данном поле, потому что вы её не применили к данному полю.
Видимо, предполагается, что все должны сразу догадаться дата в условии where и выделенная дата в рекордсете должны быть одинаковы. Или нас вообще водят за нос.
...
Рейтинг: 0 / 0
22.06.2020, 15:56
    #39971888
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Гавриленко Сергей Алексеевич
a_voronin
Функция FORMAT не работает на данном поле, потому что вы её не применили к данному полю.
Видимо, предполагается, что все должны сразу догадаться дата в условии where и выделенная дата в рекордсете должны быть одинаковы. Или нас вообще водят за нос.

Уважаемый Игорь1973, объясните, с чего вы взяли, что ваша функция не работает?
Если приглядеться:
...
Рейтинг: 0 / 0
22.06.2020, 15:56
    #39971889
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Гавриленко Сергей Алексеевич
Во-первых, работу кода надо проверять из SSMS. А если не работает, то заняться отладкой.
Во-вторых, кто пишет запросы таким ужасным образом, должны страдать. Вот и страдайте.
В-третьих, в MSSQL 2019 уже встроена функция format.



Вы на картинку внимательней посмотрите, если хотите, чтобы вас как следует пробрало отборным хохотом.
...
Рейтинг: 0 / 0
22.06.2020, 16:00
    #39971891
Игорь1973
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
авторВ-третьих, в MSSQL 2019 уже встроена функция format.
Вот именно из-за этого и появиласть проблема и зависание приложения.
Если убить UDF то не зависает.
UDF Format пришлось создать ради универсальности. Без нее ни как нельзя было обойтись.
Хорошо что MS одумались (хоть и так поздно) и опять включили функцию Format в Transact-SQL как архинеобходимую.
...
Рейтинг: 0 / 0
22.06.2020, 16:01
    #39971893
Игорь1973
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
На данные результата запроса в таблице смотреть не нужно.
...
Рейтинг: 0 / 0
22.06.2020, 16:03
    #39971895
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Модератор:
Уважаемый Игорь1973.

Если у вас есть вопросы к работе вашего приложения, обратитесь к его разработчкам.
Если у вас есть вопросы по MSSQL, задайте их согласно рекомендациям, пункт 4 и 6 .

И без картинок.
...
Рейтинг: 0 / 0
22.06.2020, 16:03
    #39971896
Игорь1973
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
На данные результата запроса в таблице смотреть не нужно.
К делу имеет отношение только часть WHERE что подчеркнуто красным. А в результатах может быть совсем по-другому варианту отформатирована дата.
Так а кто бы лучше написал UDF FORMAT?
...
Рейтинг: 0 / 0
22.06.2020, 16:05
    #39971897
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973
На данные результата запроса в таблице смотреть не нужно.
К делу имеет отношение только часть WHERE что подчеркнуто красным. А в результатах может быть совсем по-другому варианту отформатирована дата.
Так а кто бы лучше написал UDF FORMAT?
Чтобы изменить форматирование данных в вашем приложении, обратитесь к разрабочтикам вашего приложения.
...
Рейтинг: 0 / 0
22.06.2020, 16:22
    #39971911
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973
К делу имеет отношение только часть WHERE что подчеркнуто красным.
Про которую вам еще почему-то не написали, что оно есть убийца всех возможностей для индексов и что совершенно ничего удивительного в тормозах с применением этой функции в таком месте. А в результатах может быть совсем по-другому варианту отформатирована дата.
Так а кто бы лучше написал UDF FORMAT?А ЗАЧЕМ? Зачем писать функцию, которая только создает тормоза?
...
Рейтинг: 0 / 0
22.06.2020, 16:24
    #39971912
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973
UDF Format пришлось создать ради универсальности. Без нее ни как нельзя было обойтись.
В продемонстрированном вами коде необходимости в этой функции нет от слова совсем, она даже вредна.
...
Рейтинг: 0 / 0
22.06.2020, 16:35
    #39971916
Игорь1973
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Функция FORMAT была создана для применения ее в части WHERE ради универсальности.
Потому что элементы интерфейса (ветки дерева в частности) могут иметь знзачния вида "15 Марта, Понедельник, 20020 1 квартал" и прочие "безумности". При этом текст может быть на любом языке, например на польском. А при клике в ветку дерева, данные должны отфильтровываться в таблице.
Преобразовать такие произвольные значения в оптимизированные YYYYMMDD очень трудоемкая работа и не нужная. Все и так быстро работает.
В MS SQL MS не работает WHERE dbo.FORMAT ...
То есть функция с таким именем не может существовать вместе со встроенной.
...
Рейтинг: 0 / 0
22.06.2020, 16:42
    #39971922
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973
В MS SQL MS не работает WHERE dbo.FORMAT ...
То есть функция с таким именем не может существовать вместе со встроенной.
Имена объектов, содержащих зарезервированные слова, надо заключать в квадратные скобки. WHERE [dbo].[Format]
...
Рейтинг: 0 / 0
22.06.2020, 16:42
    #39971923
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973
В MS SQL MS не работает WHERE dbo.FORMAT ...
Еще раз = за такое условие в where в приличном обществе бьют канделябром. Больно. И не единожды.То есть функция с таким именем не может существовать вместе со встроенной.Еще раз - зачем она тут? Описанное вами преобразование надо делать или ДО запроса и в запрос подставлять вычисленный 1(ОДИН) раз результат преобразования. Или, в крайнем случае, делать преобразование в запросе, но в любом случае обратную сторону и тоже только один раз, а не для каждой записи.
...
Рейтинг: 0 / 0
22.06.2020, 16:44
    #39971924
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Sergey Sizov
Игорь1973
В MS SQL MS не работает WHERE dbo.FORMAT ...
Еще раз = за такое условие в where в приличном обществе бьют канделябром. Больно. И не единожды.То есть функция с таким именем не может существовать вместе со встроенной.
Еще раз - зачем она тут? Описанное вами преобразование надо делать или ДО запроса и в запрос подставлять вычисленный 1(ОДИН) раз результат преобразования. Или, в крайнем случае, делать преобразование в запросе, но в любом случае обратную сторону и тоже только один раз, а не для каждой записи.Да ладно вам.
Пусть будет потом работа для тех, кто в об этом в курсе.
...
Рейтинг: 0 / 0
22.06.2020, 16:50
    #39971926
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Гавриленко Сергей Алексеевич
Пусть будет потом работа для тех, кто в об этом в курсе.
Да пользователей сей тормозилки жалко... Они ведь обязательно на это нарвутся и им придется ЭТО терпеть до тех пор, пока не додумаются позвать и найти тех, кто "в курсе".
...
Рейтинг: 0 / 0
22.06.2020, 16:54
    #39971928
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Sergey Sizov
Гавриленко Сергей Алексеевич
Пусть будет потом работа для тех, кто в об этом в курсе.
Да пользователей сей тормозилки жалко... Они ведь обязательно на это нарвутся и им придется ЭТО терпеть до тех пор, пока не додумаются позвать и найти тех, кто "в курсе".
На 1500 заказах оно работать будет. Потом просто поставят условный 1С да и успокоятся.
...
Рейтинг: 0 / 0
22.06.2020, 16:56
    #39971929
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Гавриленко Сергей Алексеевич
На 1500 заказах оно работать будет.
Потом купят новый сервер.Потом просто поставят условный 1С да и успокоятся.Ну, как-то так... :)
...
Рейтинг: 0 / 0
23.06.2020, 09:00
    #39972190
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
Игорь1973
авторВ-третьих, в MSSQL 2019 уже встроена функция format.

Вот именно из-за этого и появиласть проблема и зависание приложения.
Если убить UDF то не зависает.
UDF Format пришлось создать ради универсальности. Без нее ни как нельзя было обойтись.
Хорошо что MS одумались (хоть и так поздно) и опять включили функцию Format в Transact-SQL как архинеобходимую.

Кто-то сообщил MS об этом и они одумались (хоть и так поздно) и опять включили функцию Format в Transact-SQL , иначе ни как, ни что.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]