Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как вывести символы после последней точки?  [new]
funkycookie
Member

Откуда:
Сообщений: 3
У меня есть текстовое поле link, мне нужно прочитать последние символы после последней точки.
например mysupertext.text.ext
результат должен быть .ext
пока что я смог добиться вывода символов после первой точки следующим запросом:

substring(Link, patindex('%.%', Link ) + 1, len(Link))

подскажите как поправить...
28 окт 11, 18:52    [11518453]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
iljy
Member

Откуда:
Сообщений: 8711
funkycookie,

select SUBSTRING(s, isnull(len(s) - nullif(charindex('.', REVERSE(s)),0) + 2, 1), 8000)
from (select 'mysupertext.text.ext' union all select 'abcdef' union all select 'abc.def' union all select '.abcdef')t(s)
28 окт 11, 18:57    [11518478]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
funkycookie,

select PARSENAME('mysupertext.text.ext',1)
28 окт 11, 18:58    [11518484]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
funkycookie
Member

Откуда:
Сообщений: 3
наверное я не очень удачно описал суть проблемы

есть колонка link, в ней набор записей 1.1.etx 2.2.etx

и есть колонка ext в нее мне нужно поместить символы после последней точки т.е. etx и ext


Link | ext
------------
1.1.ext | ext
2.2.etx | etx

пока что у меня получается так:

Link | ext
------------
1.1.ext | 1.ext
28 окт 11, 19:17    [11518573]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT ISNULL(REVERSE(LEFT(REVERSE(Link), NULLIF(CHARINDEX('.', REVERSE(Link))-1,0))),Link);
28 окт 11, 19:17    [11518580]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
SELECT ISNULL(REVERSE(LEFT(REVERSE(Link), NULLIF(CHARINDEX('.', REVERSE(Link))-1,0))),Link);
Поправка:
SELECT ISNULL(REVERSE(LEFT(REVERSE(Link), NULLIF(CHARINDEX('.', REVERSE(Link)),0)-1)),Link);
28 окт 11, 19:27    [11518624]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
funkycookie
Member

Откуда:
Сообщений: 3
iap,

SELECT
	[tbl_Files].[ID] AS [ID],
	[FileInItem].[ID] AS [FileInItemID],
	[FileInItem].[AccountID] AS [ItemID],
	[tbl_Files].[ItemTypeID] AS [ItemTypeID],
	[tbl_Files].[Link] AS [Link],
	[tbl_Files].[Description] AS [Description],
	[tbl_Files].[Revision] AS [Revision],
	[tbl_Files].[LockedByID] AS [LockedByID],
	[LockedBy].[Name] AS [LockedByName],
	[tbl_Files].[ModifiedByID] AS [ModifiedByID],
	[ModifiedBy].[Name] AS [ModifiedByName],
	[tbl_Files].[CreatedByID] AS [CreatedByID],
	[CreatedBy].[Name] AS [CreatedByName],
	[tbl_Files].[ModifiedOn] AS [ModifiedOn],
	[tbl_Files].[CreatedOn] AS [CreatedOn],
	[tbl_Files].[FileGroupID] AS [FileGroupID],
	cast (round (cast (datalength([FileData]) AS float) / cast (1048576 AS float) , 
2) AS varchar(10)) + ' MB' AS [FileSize],
	substring(Link, ISNULL(REVERSE(LEFT(REVERSE(Link), NULLIF(CHARINDEX('.', REVERSE(Link)),0)-1)),Link) AS [FileExt]
FROM
	[dbo].[tbl_Files] AS [tbl_Files]
INNER JOIN
	[dbo].[tbl_FileInAccount] AS [FileInItem] ON [FileInItem].[FileID] = [tbl_Files].[ID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [LockedBy] ON [LockedBy].[ID] = [tbl_Files].[LockedByID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Files].[ModifiedByID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Files].[CreatedByID]

Попробовал как ты сказал, что-то неправильно :(

ошибка: Ошибка открытия источника данных "".
Оригинальное сообщение об ошибке: Неправильный синтаксис около ключевого слова "AS"
28 окт 11, 19:37    [11518667]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
funkycookie,

во-первых, я AS никогда не пишу! Только в CAST
Во-вторых, SUBSTRING я не пишу, если можно написать LEFT.

В-третьих (раз уж я начал), что должно быть, если нет ни одной точки?
А то я весь Link там вывожу... А может, надо '' или вообще NULL?

В-четвёртых, посчитайте количество левых и правых скобок. Равны друг другу?
Аккуратнее копипастить надо, однако.
28 окт 11, 21:57    [11519266]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
iap,

Извиняюсь за ламерский вопрос, а аналога ораклового instr(string,pattern,-1,1) в сиквеле разве в явном виде нет? Т.е. найти первую позицию pattern в string с конца.

Или 11518624 это единственный вариант?
28 окт 11, 23:23    [11519586]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести символы после последней точки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
env
аналога ораклового instr(string,pattern,-1,1) в сиквеле разве в явном виде нет?
Нет
env
Или 11518624 это единственный вариант?
А разве до этого сообщения другие решения не предлагались?
29 окт 11, 11:55    [11520596]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить