Запрос к свободному текстовому полю

РЕДАКТИРОВАТЬ:
На самом деле я запускаю MSSQL- запрос, скажем, результат:

Идентификационное имя
1   1
2   01
3   01, 15

Затем я запустил другой URL-адрес команды и получил результат в виде XML-данных, скажем, результат (в простой форме):

4 01, 01 ааа, 15
5   02
6   03
7   100
8   101
9   115

Используя coldfusion, я могу объединить обе данные в одну "временную таблицу". Итак, на самом деле, я использую QoQ, а не запрос к базе данных
КОНЕЦ РЕДАКТИРОВАНИЯ

У меня есть такой стол

Идентификационное имя
1   1
2   01
3   01, 15
4   01, 01 ааа, 15
5   02
6   03
7   100
8   101
9   115

Возможно ли, если я хочу показать pagename = 1, результат

Идентификационное имя
1   1
2   01
3   01, 15
4   01, 01 ааа, 15

2 ответа

Решение

Я думаю, что вам больше повезет с программным кодом, чем с запросами запросов. Мой подход будет выглядеть так:

<cfset NewQuery = QueryNew("id,pagename","integer,varchar")>
<cfloop query = "ExistingQuery">
  <cfif ListFirst(pagename) EQ 1>
    code to add row and set cell values for NewQuery
  </cfif>
</cfloop>

Примечание для тех, кто читает на странице sql, это более ранний комментарий: "@MahmoudGamal извините, я использую функцию Coldfusion QueryNew для создания временной таблицы"

Другими словами, это не запрос к базе данных.

Решение для MSSQL (надежное, функция parselist может помочь вам нормализовать БД до чего-то более вменяемого)

Вспомогательные функции:

CREATE FUNCTION [dbo].[udf_GetNumeric]
    (@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
    DECLARE @intAlpha INT
    SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
    BEGIN
        WHILE @intAlpha > 0
        BEGIN
            SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
            SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
        END
    END
    RETURN ISNULL(@strAlphaNumeric,0)
END
GO

CREATE FUNCTION [dbo].[ParseList_IntAny]
(   
  @List nvarchar(1000)
)
RETURNS @Result TABLE (
  IntValue int not null
)
as
begin
  declare @Value nvarchar(20), @Position int
  select @List = LTRIM(RTRIM(@List))+ ','
  select @Position = CHARINDEX(',', @List, 1)

  if REPLACE(@List, ',', '') <> ''
  begin
    while @Position > 0
      begin
        select @Value = LTRIM(RTRIM(LEFT(@List, @Position - 1)))
        if @Value <> ''
        begin
          declare @IntValue int
          select @IntValue = dbo.udf_GetNumeric(@Value)
          insert into @Result(IntValue) values (@IntValue)
        end
        select @List = RIGHT(@List, LEN(@List) - @Position)
        select @Position = CHARINDEX(',', @List, 1)
      end
  end
  return
end
GO


declare @tmp table(ID int,  pagename nvarchar(400))
insert into @tmp
select 1,'1'
union select 2,'01'
union select 3,'01, 15'
union select 4,'01, 01 Aaa, 15'
union select 5,'02'
union select 6,'03'
union select 7,'100'
union select 8,'101'
union select 9,'115'

select * from @tmp
where exists(select top 1 1 from dbo.ParseList_IntAny(pagename) where IntValue = 1)
Другие вопросы по тегам