VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

SELECT 欄位判斷問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
ooctiger



註冊時間: 2014-04-02
文章: 16


第 1 樓

發表發表於: 星期四 五月 18, 2017 11:00 am    文章主題: SELECT 欄位判斷問題 引言回覆

請問大家

AA DBF檔中 有一欄位為 A1 C(10)
但實際程式在運作時 寫入該欄位只會用到8碼

目前AA DBF檔中,A1欄位僅有兩種資料
'xxxxxxxx ' 前8碼有值,後2碼為空白
' ' 10碼均為空白 (不是NULL)

執行以下SQL時
select * from AA where A1=''
select 結果為全部的資料資料都跑出來
不是我想像中僅列出 ' ' 10碼均為空白 的資料

執行以下SQL時
select * from AA where A1<>''
select 結果為沒有任何一筆資料
不是我想像中僅列出 'xxxxxxxx ' 前8碼有值,後2碼為空白 的資料

不知道我哪裡認知出錯了
回頂端
檢視會員個人資料 發送私人訊息
perry



註冊時間: 2014-07-20
文章: 190


第 2 樓

發表發表於: 星期四 五月 18, 2017 3:14 pm    文章主題: 引言回覆

試試 Empty(A1)
A1=spac(10) ->Empty(A1)=.T.
A1#spac(10) ->Empty(A1)=.F.
回頂端
檢視會員個人資料 發送私人訊息
ooctiger



註冊時間: 2014-04-02
文章: 16


第 3 樓

發表發表於: 星期四 五月 18, 2017 5:11 pm    文章主題: 引言回覆

perry 的方式是可行的,謝謝 perry

要抓取A1沒有輸入值的資料
select * from AA where empty(A1)=.T.

要抓取A1有輸入值的資料
select * from AA where empty(A1)=.F.

但是為什麼我原來的方法不可行呢 ?
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 3800
來自: Taipei,Taiwan

第 4 樓

發表發表於: 星期四 五月 18, 2017 5:31 pm    文章主題: 引言回覆

因為你沒有了解 FOXPRO 的字串比對方式

----
https://msdn.microsoft.com/en-us/library/aa978369(v=vs.71).aspx

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
syntech



註冊時間: 2003-05-16
文章: 3800
來自: Taipei,Taiwan

第 5 樓

發表發表於: 星期四 五月 18, 2017 5:32 pm    文章主題: 引言回覆

Visual FoxPro 有兩個測試相等的關聯運算子:等號 (=) 運算子和雙等號 (==) 運算子。您可以使用 = 運算子來執行比較同樣型態之間的值以及適合比較字元、數值、日期與邏輯等型態的資料。不過,當您用 = 運算子比較字元運算式時,其結果可能不如所期望的。

當 SET EXACT 命令設定為 OFF 時,字元運算式是從左到右逐一字元比較直到運算式中的一個不等於另一個或是到達 = 運算子右側運算式的尾端時;當 SET EXACT 命令設定為 ON 時,字元運算式是從左到右逐一字元比較直到兩個運算式都到達尾端。

您可以使用 == 運算子進行字元或二進位資料的精確比較。如果您使用 == 運算子比較兩個字元運算式或兩個二進位運算式時,在 == 運算子兩邊上的運算式必須精確地含有相同的字元或位元組,其分別包括了空格或零 (0) 位元組是被考慮相等的。當字串運算式或二進位運算式是使用 == 運算子比較時,SET EXACT 命令的設定值會被忽略。相關詳細資訊請參閱「關聯運算子」。

下表展示所選的運算子與 SET EXACT 命令設定的值如何影響比較的結果。

注意:
一個底線代表一個空格。



比較    =與 SET EXACT OFF  =與 SET EXACT ON  ==與 SET EXACT ON 或 OFF
"abc" = "abc"   符合         符合        符合

"ab" = "abc"   不符合        不符合       不符合

"abc" = "ab"   符合         不符合       不符合

"abc" = "ab_"  不符合        不符合       不符合

"ab" = "ab_"  不符合         符合       不符合

"ab_" = "ab"   符合          符合       不符合

"" = "ab"    不符合         不符合       不符合

"ab" = ""    符合          不符合       不符合

"__" = ""    符合           符合       不符合

"" = "___"   不符合          符合       不符合

TRIM("___") = ""  符合         符合       符合

"" = TRIM("___")  符合         符合       符合


當處理 SQL 敘述 (譬如 SELECT - SQL 命令) 時,如果您使用 = 運算子,SET ANSI 命令的設定值可能會影響結果。

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
perry



註冊時間: 2014-07-20
文章: 190


第 6 樓

發表發表於: 星期四 五月 18, 2017 5:57 pm    文章主題: 引言回覆

個人都是 set exac off
用字串比較簡單多變化

aa='12345'
bb='123456'
cc=''
?aa==bb && 長度內容不一樣所以不成立 == 要長度內容完全一致

?bb=aa && 因為只比較短的 aa (長度 5)內容 所以成立

?aa=cc && cc長度 0 ,所以成立

把長度短的放後面,比較不會出問題!!

wher A1=spac(10) &&如有索引會比 wher empt(A1) 快
回頂端
檢視會員個人資料 發送私人訊息
ooctiger



註冊時間: 2014-04-02
文章: 16


第 7 樓

發表發表於: 星期五 五月 19, 2017 8:47 am    文章主題: 引言回覆

感謝 perry、syntech

受益良多
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 3800
來自: Taipei,Taiwan

第 8 樓

發表發表於: 星期五 五月 19, 2017 10:37 am    文章主題: 引言回覆

從上面的 "abc" = "ab" 及 "abc"="ab_" 的CASE 來看.
有些人會用 F1 = PADR(ALLTRIM(V1),LEN(F1)) 的方式比對.
就是故意做成 "abc"="ab_" 的效果.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作