在应用程序开发中,会出现单选或多选框条件输入的需求。如输入框的输入值为sz,或sz|nj|zj|nt,在SQL中会这样处理。 select * from tab_1 where col_1=sz ;这是单选框输入。 select * from tab_1 where col_1 =sz|nj ;这是多选框输入。 很明显,多选输入值不
在应用程序开发中,会出现单选或多选框条件输入的需求。如输入框的输入值为'sz',或'sz|nj|zj|nt',在SQL中会这样处理。select * from tab_1 where col_1='sz' ;这是单选框输入。
select * from tab_1 where col_1 ='sz|nj' ;这是多选框输入。
很明显,多选输入值不会查询出结果。
-
如何解决这个问题?
有使用动态SQL实现的方法,如拼装成这样的SQL语句:select * from tab_1 where col_1 in ('sz','nj') ;
还有将'sz|nj'拆分插入到临时表中,再关联该临时表实现,如select * from tab_1 where col_1 in (select a from tt);
临时表涉及到表的创建和维护,还有IO。
我最近想到一个方法:将传入的字符串以嵌套表类型返回,使用表函数调用,实现这类需求。
函数代码如下:
1.create or replace function f_get_unitstring(p_str_all in varchar2,
2. p_str_gap in varchar2) 3. return t_ntb_allstring is 4. --create or replace type t_ntb_allstring is table of varchar2(20); 5. v_ntb_allstring t_ntb_allstring;
6.
7. str_unit varchar2(20);
8. str_char varchar2(1);
9.
10. i_str_length number;
11. i_str_index number;
12.
13.begin 14. /*p_str_city:='nj~wx~sz~cz~zj~nt~yc~';*/ 15. --p_str_all := '1|2|3|'; 16. --p_str_gap := '|'; 17.
18. v_ntb_allstring := t_ntb_allstring();
19.
20. i_str_length := length(p_str_all);
21.
22. i_str_index := 1;
23.
24. while (i_str_index 25. str_char := substr(p_str_all, i_str_index, 1);
26.
27. if (str_char = p_str_gap) then 28.
29. if (str_unit is not null) then 30. v_ntb_allstring.extend(1);
31. v_ntb_allstring(v_ntb_allstring.count) := str_unit; 32. str_unit := null; 33. end if; 34.
35. else 36. str_unit := str_unit || str_char;
37.
38. if (i_str_index = i_str_length) then 39. v_ntb_allstring.extend(1);
40. v_ntb_allstring(v_ntb_allstring.count) := str_unit; 41. str_unit := ''; 42. end if; 43.
44. end if; 45.
46. i_str_index := i_str_index + 1;
47. end loop; 48.
49. return(v_ntb_allstring); 50.end; 测试如下:
1.SQL> select * from table(f_get_unitstring('1aa|2cc|3bb','|')); 2.
3.COLUMN_VALUE
4.-------------------- 5.1aa
6.2cc
7.3bb
8.
9.SQL>
以上解决方法仅供参数,欢迎交流。
再增加一种方法。
使用pipelined函数也能实现这个需求。但在此处性能优势不会体现出来,如果您碰巧碰到大数据量如亿级别的字符串拆分,该方法就能派上用场。
代码如下:
1.create or replace function f_get_unitstring(p_str_all in varchar2,
2. p_str_gap in varchar2) 3. return t_ntb_allstring 4. pipelined is 5. --create or replace type t_ntb_allstring is table of varchar2(20); 6. v_ntb_allstring t_ntb_allstring;
7. str_unit varchar2(20);
8. str_char varchar2(1);
9. i_str_length number;
10. i_str_index number;
11.begin 12. v_ntb_allstring := t_ntb_allstring();
13. i_str_length := length(p_str_all);
14. i_str_index := 1;
15. while (i_str_index 16. str_char := substr(p_str_all, i_str_index, 1);
17. if (str_char = p_str_gap) then 18. if (str_unit is not null) then 19. -- v_ntb_allstring.extend(1); 20. -- v_ntb_allstring(v_ntb_allstring.count) := str_unit; 21. pipe row(str_unit);
22. str_unit := null; 23. end if; 24. else 25. str_unit := str_unit || str_char;
26. if (str_unit is not null) then 27. -- v_ntb_allstring.extend(1); 28. -- v_ntb_allstring(v_ntb_allstring.count) := str_unit; 29. pipe row(str_unit);
30. str_unit := null; 31. end if; 32. end if; 33. i_str_index := i_str_index + 1;
34. end loop; 35. --return(v_ntb_allstring); 36.end;

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。