Saya memiliki database yang penuh dengan baris dengan Huruf Besar yang perlu saya konversi ke Huruf Kalimat menggunakan prosedur tersimpan di TSQL. Misalnya: String Asli:
THIS IS THE FIRST SENTENCE. THIS IS THE SECOND SENTENCE! THIS IS THE THIRD SENTENCE? THIS IS THE FOURTH SENTENCE.
String yang Dikonversi:
This is the first sentence. This is the second sentence! This is the third sentence? This is the fourth sentence.
-1
Jerms3033
20 Mei 2015, 18:02
1 menjawab
Jawaban Terbaik
Nah, hal semacam ini akan lebih baik ditangani dalam fungsi CLR atau di lapisan presentasi, tetapi di sini ada satu cara untuk melakukannya hanya dengan menggunakan tsql:
Pembaruan:
Saya telah meningkatkan kode untuk mendeteksi kalimat yang dimulai dengan angka, sehingga akan diabaikan (yaitu jika kalimat adalah 4th sentence
, t
setelah 4
akan tetap menjadi huruf kecil .)
DECLARE @OriginalString varchar(200) = 'THIS IS THE FIRST SENTENCE. THIS IS THE SECOND SENTENCE! THIS IS THE THIRD SENTENCE? 4TH SENTENCE.'
DECLARE @TargetString varchar(200),
@Index int = 2,
@CurrentChar CHAR(1),
@FoundBeginingOfSentence bit = 0,
@BeginingOfSentenceIsANumber bit = 0
SET @TargetString = LEFT(@OriginalString, 1) + LOWER(RIGHT(@OriginalString, LEN(@OriginalString)-1))
WHILE @Index < LEN(@OriginalString)
BEGIN
SET @CurrentChar = SUBSTRING(@OriginalString, @Index, 1)
SET @Index = @Index + 1
IF @CurrentChar IN('.', '!', '?')
BEGIN
WHILE @FoundBeginingOfSentence = 0 AND @Index < LEN(@OriginalString)
BEGIN
SET @CurrentChar = SUBSTRING(@OriginalString, @Index, 1)
IF PATINDEX('[0-9]', @CurrentChar) = 1
BEGIN
SELECT @FoundBeginingOfSentence = 1,
@BeginingOfSentenceIsANumber = 1
END
IF @BeginingOfSentenceIsANumber = 0
BEGIN
IF PATINDEX('[A-Z]', @CurrentChar) = 1 BEGIN
SET @FoundBeginingOfSentence = 1
SET @TargetString = LEFT(@TargetString, @Index-1) + UPPER(SUBSTRING(@TargetString, @Index, 1)) + SUBSTRING(@TargetString, @Index+1, LEN(@TargetString))
END
SET @Index = @Index + 1
END
END
END
SELECT @FoundBeginingOfSentence = 0,
@BeginingOfSentenceIsANumber = 0
END
Catatan: Anda dapat menambahkan pembatas kalimat apa pun yang Anda inginkan ke pernyataan if
pertama.
3
Zohar Peled
21 Mei 2015, 08:30
@Jerms3033: Apakah saran saya menjawab pertanyaan Anda? jika tidak, Bagaimana saya bisa memperbaikinya?
– Zohar Peled
25 Mei 2015, 14:32
Saya masih berpikir metode CLR akan memiliki kinerja yang lebih baik, tetapi selama Anda senang dengan saran saya maka saya juga senang :-)
– Zohar Peled
27 Mei 2015, 16:51
sql-server-2014
. Perbedaan sintaks dan fitur sering mempengaruhi jawaban.