SQL 텍스트 필드에서 처음 네 줄만 선택하십시오.
문제
SQL Server 2008 Express >> Visual Web Developer >> C#
나는 다음과 같은 테이블에서 레코드를 꺼내고 있습니다.
SELECT Name, Category, Review FROM ReviewTable
이것은 잘 작동하지만 SQL Server의 검토 필드 유형은 텍스트이며 매우 긴 (잡지 기사를 생각하십시오).
각 행의 리뷰 필드에서 처음 네 줄을 가져 와서 리피터 컨트롤에 표시하고 싶습니다. 이 줄은 기사의 티저와 같습니다.
이게 가능해? 어떻게 달성 할 수 있습니까?
해결책
리뷰 에서이 첫 1000자를 반환합니다.
SELECT Name, Category, CAST(Review AS VARCHAR(1000) FROM ReviewTable
처음 4 줄이 있어야하는 경우 분할 기능을 사용해야합니다. 이것은 작동 할 수 있습니다 :
CREATE FUNCTION [dbo].[Split]
(
@SearchString VARCHAR(8000),
@Separator VARCHAR(5),
@MaxItems INT
)
RETURNS @strtable TABLE (strval VARCHAR(8000))
AS
BEGIN
DECLARE @tmpStr VARCHAR(8000), @intSeparatorLength INT, @counter int
IF @MaxItems IS NULL
SET @MaxItems = 2147483647 -- max int
SET @intSeparatorLength = LEN(@Separator)
SET @Counter = 0
SET @tmpStr = @SearchString
WHILE 1=1 BEGIN
INSERT INTO @strtable VALUES ( SUBSTRING(@tmpStr, 0 ,CHARINDEX(@Separator, @tmpStr)))
SET @tmpStr = SUBSTRING(@tmpStr,CHARINDEX(@Separator,@tmpStr)+LEN(@Separator),8000)
SET @counter = @counter + 1
IF (CHARINDEX(@Separator,@tmpStr) < 1 OR @counter >= @MaxItems)
BREAK
END
RETURN
END
용법: select * from dbo.split('aaa**bbbb**CCCC**dddd**eeee**dffff**ggggg', '**', 4)
다른 팁
글쎄, 라인의 첫 번째는 조금 더 어려울 수 있지만, 처음 250 자 정도를 꺼내지 않는 이유는 무엇입니까?
SELECT Name, Category, SubString(Review, 1, 250) AS Review FROM ReviewTable
데이터베이스 서버가 웹 서버와 동일한 로컬 네트워크에있는 경우 전체 필드를 선택할 것입니다. 액세스하려면 여전히 조회해야합니다 어느 해당 필드의 데이터이므로 데이터를 찾기위한 SQL 성능 면적은 문제가되지 않습니다. 전체 필드를 검색하는 유일한 단점은 서버간에 전달되는 데이터의 양입니다. 따라서 : 그들이 같은 네트워크에 있다면, 나는 이것이 선택하는 동안 각 레코드를 조작하는 것보다 확실히 저렴할 것이라고 말할 것입니다. 또한 사용자가 텍스트의 정식 버전을보고 싶을 때 데이터베이스를 다시 누를 필요가 없도록 응답을 캐시 할 수 있습니다.
그러나, 당신의 질문에 대답하기 위해, 아래는 아마 그것을 할 것입니다.
SELECT Name, Category, left(convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review), charindex('\n', convert(varchar(8000), Review))+1)+1)+1)-1) FROM ReviewTable
... hrrm, 그래, 정말, 나는 나의 첫 번째 단락을 고려할 것이다