Запрос к свободному текстовому полю
РЕДАКТИРОВАТЬ:
На самом деле я запускаю 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)