Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / PATHINDEX не может найти возврат каретки. Что не так? / 5 сообщений из 5, страница 1 из 1
24.06.2020, 01:54
    #39972606
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PATHINDEX не может найти возврат каретки. Что не так?
Код: 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.
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ttt' AND xtype = 'IF')
DROP function dbo.ttt
GO

CREATE FUNCTION dbo.ttt( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS
RETURN SELECT 1 AS A
go

DECLARE @Command NVARCHAR(4000) = N' CREATE FUNCTION DBO.TTT( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS RETURN SELECT 1 AS A ';

SELECT @Command = OBJECT_DEFINITION(OBJECT_ID('ttt'))

DECLARE @cmd nvarchar(4000)= REPLACE(UPPER(@Command), N' ', N' ')
set @cmd = REPLACE(@cmd, N' ', N' ')
DECLARE @tbl TABLE(val int)

INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS RETURN%', @cmd)

select max(val), @cmd from @tbl
...
Рейтинг: 0 / 0
24.06.2020, 02:24
    #39972607
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PATHINDEX не может найти возврат каретки. Что не так?
Неправда, ищет.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
declare
    @s      nvarchar (max) = N'AS' + nchar(10)+ N'begin'
    , @p    nvarchar (max) = N'%' + nchar(10) + '%N'

select
    1
where
     @s like @p

select
    1
where
     patindex ( @p, @s ) > 0



-----------
1


-----------
1
...
Рейтинг: 0 / 0
24.06.2020, 02:30
    #39972609
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PATHINDEX не может найти возврат каретки. Что не так?
Ваш паттерн вот этот:

Код: sql
1.
INSERT INTO @tbl SELECT PATINDEX(N'%as'+NCHAR(13)+NCHAR(10)+N'return%', @cmd)
...
Рейтинг: 0 / 0
24.06.2020, 11:01
    #39972658
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PATHINDEX не может найти возврат каретки. Что не так?
Lepsik
Код: 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.
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ttt' AND xtype = 'IF')
DROP function dbo.ttt
GO

CREATE FUNCTION dbo.ttt( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS
RETURN SELECT 1 AS A
go

DECLARE @Command NVARCHAR(4000) = N' CREATE FUNCTION DBO.TTT( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS RETURN SELECT 1 AS A ';

SELECT @Command = OBJECT_DEFINITION(OBJECT_ID('ttt'))

DECLARE @cmd nvarchar(4000)= REPLACE(UPPER(@Command), N' ', N' ')
set @cmd = REPLACE(@cmd, N' ', N' ')
DECLARE @tbl TABLE(val int)

INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS RETURN%', @cmd)

select max(val), @cmd from @tbl



попробуйте заменить, к примеру,
Код: sql
1.
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)


на
Код: sql
1.
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+NCHAR(10)+N'RETURN%', @cmd)



PS. а вообще, есть такой режим HEX у практически любого редактора :)
...
Рейтинг: 0 / 0
24.06.2020, 15:19
    #39972770
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PATHINDEX не может найти возврат каретки. Что не так?
Lepsik,

вы последовательность байт перепутали, обычно возврат каретки следует перед переносом строки то есть нужно искать не

char(10) + char(13)

а наоборот char(13) + char(10)

это наглядно видно в байт-представлении строки
Код: sql
1.
2.
3.
4.
declare @test varchar(255) = 'a
b';

select cast(@test as varbinary(256)), cast(char(10) as varbinary) as [lf], cast(char(13) as varbinary) as [cr]



string lf cr0x61 0D0A 62 0x0A 0x0D
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / PATHINDEX не может найти возврат каретки. Что не так? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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