1. sql語句 查詢 非數字字元
把數字全部轉化成ascii碼 然後來判斷。下面是個例子。
這題給5分太少了點,呵呵。
DECLARE @position int, @string char(15),@t_num varchar(50)
DECLARE cursor_r cursor for select t_num from tab2
open cursor_r
fetch next from cursor_r into @string
begin
while @@fetch_status =0
begin
--print @string
SET @position = 1
WHILE @position <= len(@string)
BEGIN
set @t_num =ASCII(SUBSTRING(@string, @position, 1))
if @t_num<48 or @t_num>57
begin
insert into tab3 (t_num) values(@string)
break
end
SET @position = @position + 1
END
fetch next from cursor_r into @string
end
close cursor_r
deallocate cursor_r
end
這題給5分太少了點,呵呵。正好我以前寫過,就無私奉上了。
2. SQL如何去除特殊字元
sql 除去特殊字元,採用replace函數,但是有些類似空格的還是無法刪除,
那麼由於這些是非空格,而是 "回車"、「tab」鍵,此時我們需要採用ascII碼,作為鍵值來替換,
MSSQL中空格完美剔除方法分享
我們可以使用類似的方法,處理table中的其它字元。
請認真閱讀,並參考。
3. SQL欄位中的不可見的亂字元怎麼清除
給你個過程參考下
--在SQL Server中去除表中不可見字元
--以下的實例為去除指定表中數據類型是VARCHAR,CHAR,NVARCHAR的欄位值中的不可見字元。 注釋:此處只去掉前後的不可見字元,不包括中間的字元,而且沒有區分中文。
--在使用前需要指定對應要修改的表名,並且需要在對應資料庫下執行;
SET NOCOUNT ON
DECLARE @TblName VARCHAR(100)
DECLARE @UpdateString NVARCHAR(1000)
DECLARE @SelectString NVARCHAR(1000)
DECLARE @COlName VARCHAR(100)
DECLARE @COUNT INT
SET @TblName = 'YOURTABLENAME'--指定想要修改的表名
--定義游標取出指定表內的數據類型是VARCHAR,char,nVARCHAR的欄位名稱
DECLARE cur_ColName CURSOR
FOR
SELECT col.name
FROM syscolumns AS col
inner join sysobjects AS obj ON col.ID = obj.ID
INNER join systypes AS typ ON col.xtype = typ.xtype
WHERE obj.xtype ='U'
AND obj.name = @TblName
AND typ.name IN ('VARCHAR','CHAR','NVARCHAR','NCHAR')
FOR READ ONLY
--打開游標
OPEN cur_ColName
FETCH NEXT FROM cur_ColName INTO @ColName
IF @@FETCH_STATUS<>0
BEGIN
PRINT '沒有對應表或欄位,
'PRINT '請確認當前資料庫內有' + @TblName + '表,
' PRINT '或該表內有VARCHAR、CHAR、NVARCHAR、NCHAR類型的欄位!
' GOTO LABCLOSE
END--循環修改
WHILE @@FETCH_STATUS=0
BEGIN
--拼修改字元串
--去掉左邊的不可見字元
SET @SelectString = 'SELECT @COU=COUNT(*)
FROM ' + @TblName +'
WHERE ASCII(LEFT(' + @ColName +',1))<32
AND '+ @ColName + ' IS NOT NULL'
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',
@COUNT OUTPUT WHILE @COUNT>0
BEGIN
SET @UpdateString =
' UPDATE ' + @TblName +
' SET ' + @ColName + '=RIGHT(' + @ColName + ',LEN(' + @ColName + ')-1)
WHERE ASCII(LEFT(' + @ColName + ',1))<32
AND ' + @ColName + ' IS NOT NULL'
EXEC sp_executesql @UpdateString
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',@COUNT OUTPUT
END
--去掉右邊的不可見字元 SET @SelectString = 'SELECT @COU=COUNT(*)
FROM ' + @TblName +'
WHERE ASCII(RIGHT(' + @ColName +',1))<32
AND '+ @ColName + ' IS NOT NULL'
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',
@COUNT OUTPUT WHILE @COUNT>0
BEGIN
SET @UpdateString = ' UPDATE ' + @TblName + ' SET '
+ @ColName + '=LEFT(' + @ColName + ',LEN(' + @ColName + ')-1)
WHERE ASCII(RIGHT(' + @ColName + ',1))<32
AND ' + @ColName + ' IS NOT NULL'
EXEC SP_EXECUTESQL @UpdateString
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',
@COUNT OUTPUT
END
PRINT 'column: ' + @ColName + '---ok'
FETCH NEXT FROM cur_ColName INTO @ColName
END
--關閉、釋放游標LABCLOSE: CLOSE cur_ColName
DEALLOCATE cur_ColName
4. SQL表中怎麼去掉一個欄位中的空字元
用REPLACE函數來替換。
SQL欄位中的空字元有2種,空格符和tab製表符(即char(9))。
例:去除 表table 中 col 列的空字元
去除空格符:update table set col = REPLACE(col,' ','')
去除製表符:update table set col = REPLACE(col,CHAR(9),'')
5. sql運行問題
sql運行問題?
資料庫運行過程中常見的故障有3類:事物故障、系統故障、介質故障。
恢復策略:
1、事物故障:
發生事務故障時,被迫中斷的事務可能已對資料庫進行丁修改,為了消除該事務對資料庫的影響,要利用日誌文件中所記載的信息,強行回滾該事務,將資料庫恢復到修改前的初始狀態。
為此,要檢查日誌文件中由這些事務所引起的發生變化的記錄,取消這些沒有完成的事務所做的一切改變,這類恢復操作稱為事務撤銷。
2、系統故障:
系統故障的恢復要完成兩方面的工作,既要撤銷所有末完成的事務,還要重做所有已提交的事務,這樣才能將資料庫真正恢復到一致的狀態。
3、介質故障:
介質故障比事務故障和系統故障發生的可能性要小,但這是最嚴重的一種故障,破壞性很大,磁碟上的物理數據和日誌文件可能被破壞,這需要裝入發生介質故障前最新的後備資料庫副本,然後利用日誌文件重做該副本後所運行的所有事務。
「數據故障恢復」和「完整性約束」、「並發控制」一樣,都是資料庫數據保護機制中的一種完整性控制。所有的系統都免不了會發生故障,有可能是硬體失靈,有可能是軟體系統崩潰,也有可能是其他外界的原因,比如斷電等等。
資料庫運行的突然中斷會使資料庫處在一個錯誤的狀態,而且故障排除後沒有辦法讓系統精確地從斷點繼續執行下去。這就要求DBMS要有一套故障後的數據恢復機構,保證資料庫能夠回復到一致的、正確地狀態去。
6. 如何快速判定ASCII字元和非ASCII字元
def is_ascii(s):
return all(ord(c) < 128 for c in s)
或者使用:
s.decode('ascii')
然後,抓UnicodeDecodeError異常。
後者看上去要高效一些。
Update: 還有一種方法,使用curses模組:
from curses import ascii
def isascii(s):
return all(ascii.isascii(c) for c in s)
7. 這段SQL語句是什麼意思,說是「去除字元串中非字母和數字字元」,但真看不懂。。。。。
ascii中數字是48-57 大寫字母是65-90 小寫字母是97-122
是先川建一個空的字元串,然後把字元串'as#df*4,56'的每一位都拿出來匹配他的ascii碼值
在范圍內的字元因為where ascii(b.c) between 48 and 122 這個條件滿足會被選出來,
然後拼到空字元串上,如果不是則選出null值,也拼上去,最後列印
tb_num06這個肯定是一個1,2,3,4.。。這樣的序列表,然後<=字元串長度就是10,就是10條記錄
然後通過函數substring(a.n, iter.pos, 1)取出字元串的每一個字元
其實這個寫的不好,無法去除逗號,冒號什麼的
你可以查看下ASCII碼表
8. 如何判斷一個字元串中是否有非ASCII字元
一般定義 字元編碼 0 到 0x7F 為 ASCII字元,超出 0x7F 的算 擴展ASCII字元。
假定字元串 存放在 char s[SIZE]; 中,字元串長度為 strlen(s); 下面方法可判斷:
char s[SIZE];
int i,flag=0;
for (i=0;i<strlen(s);i++) if (s[i]>0x7F){flag=1; break;};
if (flag==1) 字元串中含有非ASCII字元; else 不含非ASCII字元;