sqlserver字元串
1. sqlserver資料庫中一段字元串裡面有3個字母c我怎麼取到第二個c的位置
使用sqlserver內置的字元串截取函數即可
2. sqlserver 按分隔符截取字元串
可以參考下面的代碼:
selectsubstring('ADFASDFD(DASFADSFAS)',1,charindex('(','ADFASDFD(DASFADSFAS)')-1)
主要用到兩個函數,一個charindex,這個是判斷指定字元位置的函數。
另一個是substring,這個是截取字元串的函數。
(2)sqlserver字元串擴展閱讀:
sqlserver參考函數
upper(char_expr) 轉為大寫
lower(char_expr) 轉為小寫
space(int_expr) 生成int_expr個空格
reverse(char_expr) 反轉字元串
stuff(char_expr1,start,length,char_expr2) 將字元串char_expr1中的從
3. sqlserver 怎麼分割字元串
如樓上給的 單獨分割一部分 也可用下面的函數 分割出一個集合
--1.0拆分字元串參數@strSource要操作的字元串@strSeparator分隔符
CREATEFUNCTION[dbo].fn_splitStr(@strSourceNVARCHAR(4000),@strSeparatorNVARCHAR(10))
RETURNS@tbResultTABLE(idINTIDENTITY(1,1),rsNVARCHAR(1000))
AS
BEGIN
DECLARE@dwIndexINT,@strResultNVARCHAR(1000),@dwSeparatorLenINT=LEN(@strSeparator);
SET@dwIndex=CHARINDEX(@strSeparator,@strSource);--取得第一個分隔符的位置
WHILE@dwIndex>0
BEGIN
SET@strResult=LEFT(@strSource,@dwIndex-1);
INSERT@tbResultVALUES(@strResult);
--將要操作的字元串去除已切分部分
SET@strSource=SUBSTRING(@strSource,@dwIndex+LEN(@dwIndex),LEN(@strSource));
SET@dwIndex=CHARINDEX(@strSeparator,@strSource);--循環量增加
END
--處理最後一節
IFLEN(@strSource)>0INSERT@tbResultVALUES(@strSource)
RETURN;
END
GO
4. sqlserver如何在字元串中間增加字元
直接用估計沒有,可以定義一個函數轉一下,MSSQL中有個stuff函數
在指定位置替換或增加字元,比如:
SELECT STUFF('12345678', 2, 3, 'abc')
SELECT STUFF('12345678', 2, 0, ':')
但只能插入一個位置。
建議自定義一個字元串處理函數,然後在語句中調用吧
比如
create function dbo.fn_setColon (
@oldstr varchar(4000) )
returns varchar(4000)
as
begin
declare @outstr varchar(4000)
set @outstr=''
while (len(@oldstr)>2)
begin
set @outstr=@outstr+left(@oldstr,2)+':'
set @oldstr=right(@oldstr, len(@oldstr)-2)
end
if @oldstr<>''
begin
set @outstr=@outstr+@oldstr
end
return @outstr
end
select dbo.fn_getColon('123456789')
第二種情況可以先把字元串中的字母替換掉,然後再調用該函數,建議還是通過前端程序來處理字元串。
5. sqlserver中如何把字元串轉換成數字
SQL Server中的數值類型分為兩種,一種是精確的數值類型,具體的數據類型有:bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,這些數據類型能夠精確的表明某以數值;另一種是近似的數值類型,具體就是float和real。浮點數據為近似值,因此,並非數據類型範圍內的所有值都能精確地表示。
有些時候我們需要將這些數值類型轉換為字元串類型,用到的轉換函數就是cast和convert,這兩個函數的作用都是進行類型轉換,只不過語法格式不同。據說在轉換時還是有一定的區別的,不過我個人更習慣於使用convert函數,應該這個函數一方面更像是個函數的語法,另一方面在做時間和數值轉換成字元串時還可以指定轉換的格式。
對於精確數值的數據類型,轉換出來的字元串就是我們存儲的數值。比如:
declare @i intset @i=123456789
print 'test:'+convert(varchar(20),@i)
輸出就是:test:123456789
而如果對於近似數值的數據類型,那麼可就沒有那麼簡單了。
declare @i floatset @i=123456789
print 'test:'+convert(varchar(20),@i)
輸出結果:test:1.23457e+008
輸出的結果是使用科學計數法來表示的,再看看可否通過指定轉換樣式來指定不使用科學計數法呢?幫助文檔中說到float 或 real 轉換為字元數據時的 style 值:
0(默認值)最大為 6 位數。根據需要使用科學記數法。
1 始終為 8 位值。始終使用科學記數法。
2 始終為 16 位值。始終使用科學記數法。
我們的值是123456789,超過了6位數.所以不管是0還是1,2結果都會使用科學計數法來表示。那麼要怎麼樣才能將我們的數據不轉換成科學計數法而輸出呢?比較簡單的辦法就是將近似數據轉換為精確數據,然後再將精確數據轉換成字元串。
同樣以上面的例子為例, 進行兩次數據類型的轉換如下:
declare @i floatset @i=123456789
print 'test:'+convert(varchar(20),convert(int,@i))
輸出:test:123456789如果是有小數,那麼我們要轉換出小數位的話,可以轉換成decimal,轉換出的小數位數在定義decimal時指定。比如要輸出4位小數,那麼轉換代碼是:
declare @i floatset @i=123456789.12
print 'test:'+convert(varchar(20),convert(decimal(18,4),@i))
輸出:test:123456789.1200
6. sqlserver 查詢結果列組成字元串
Select L.lastid,f.firstid,(Select 姓名+':'+電話+',' from [last] where firstid=f.firstid For XML Path(''))
from [first] F left join [last] L
on F.firstid=L.firstid Group by L.lastid,f.firstid
7. SqlServer函數的字元串函數
1 字元串函數
1.1 長度與分析用
datalength(Char_expr) 返回字元串包含字元數,但不包含後面的空格
substring(expression,start,length) 不多說了,取子串
right(char_expr,int_expr) 返回字元串右邊int_expr個字元
1.2 字元操作類
upper(char_expr) 轉為大寫
lower(char_expr) 轉為小寫
space(int_expr) 生成int_expr個空格
replicate(char_expr,int_expr)復制字元串int_expr次
reverse(char_expr) 反轉字元串
stuff(char_expr1,start,length,char_expr2) 將字元串char_expr1中的從
start開始的length個字元用char_expr2代替
ltrim(char_expr) rtrim(char_expr) 取掉空格
ascii(char) char(ascii) 兩函數對應,取ascii碼,根據ascii碼取字元
1.3 字元串查找
charindex(char_expr,expression) 返回char_expr的起始位置
patindex(%pattern%,expression) 返回指定模式的起始位置,否則為0
8. SQLserver字元型數據在哪裡
語法如下:instr(string1,string2,start_position,nth_appearance)。
SqlServer有如下幾種聚合函數SUM、AVG、COUNT、COUNT(*)、MAX和MIN,但是這些函數都只能聚合數值類型,無法聚合字元串。
9. 如何讓sqlserver對查詢字元串大小寫敏感
聲明我的答案是網路的,這個很常見啊,網上一搜一大堆。
在SQLServer中默認對大小寫是不敏感的,例如fname='peter'和fname='PETER'結果是一樣的。但有時候用戶會要求區分大小寫,如驗證密碼等。這種情況下的處理辦法就是在欄位後加上collateChinese_PRC_CS_AS_WS
如:
select*fromHRS_EMPLOYEEwhereEMPLOYEE_NAME='admin'ANDPASSWORDcollateChinese_PRC_CS_AS_WS='hongli'
是否區分大小寫與排序規則有關,排序規則中各部分含義如下所示:
舉例分析Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字元集,Chinese_PRC_指針對大陸簡體字UNICODE的排序規則。
排序規則的後半部份即後綴含義:
_BIN二進制排序
_CI(CS)是否區分大小寫,CI不區分,CS區分
_AI(AS)是否區分重音,AI不區分,AS區分
_KI(KS)是否區分假名類型,KI不區分,KS區分
_WI(WS)是否區分寬度WI不區分,WS區分
區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。
區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,比較還將重音不同的字母視為不等。
區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。
區分寬度:如果想讓比較將半形字元和全形字元視為不等,請選擇該選項
10. SqlServer字元串比較
前綴字元如果位數種類不是很多,比如只有三位、四位、五位,你可以在公式中用IF(ISERROR(MATCH(LEFT(A1,3這種多判斷幾次就是了