powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
22 сообщений из 22, страница 1 из 1
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
    #39971877
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Которая 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
Почему-то в версии MS SQL Server 2019 перестала работать функция FORMAT
    #39971882
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь1973,

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

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

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

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



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

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

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

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

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


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