1. 程式人生 > >MYSQL建立一個 “將一個字串以某個分隔符分隔得到多個值” 的函式,併為多個值加上序號

MYSQL建立一個 “將一個字串以某個分隔符分隔得到多個值” 的函式,併為多個值加上序號

1:首先建立一個自定義函式實現分隔的功能:

思路:

(1、獲取分隔符在源字串中第一次出現的位置,把獲取的位置之前的子字串賦值給表的一列 (2、把第一步獲取的位置之後的子字串賦值為新的源字串 (3、再獲取分隔符在第二步得到的新的源字串中的位置,並把獲取的位置之前的子字串賦值給表的一列 (4、重複第2、3步驟,直到子字串中無分隔符;

CREATE FUNCTION f_splitt(@sep_s varchar(100),@s VARCHAR(1000)) --分隔符@sep_s
RETURNS @v_t TABLE(a VARCHAR(100))
AS
BEGIN
	DECLARE @i bigint;
	set @i=CHARINDEX(@sep_s,@s);
	while @i>0
	BEGIN
		INSERT @v_t VALUES(LEFT(@s,@i-1));
		set @s=SUBSTRING(@s,@i+1,LEN(@s)
[email protected]
); set @i=CHARINDEX(@sep_s,@s); END IF @s<>'\' INSERT @v_t(a) VALUES (@s); --print @s; RETURN END:
比如:字串"4|0|0|0|0|0|0|0|1|9|1|0|0" 被分割成13個數值。

2:建立儲存過程從源表獲取資料,經過分隔,插入到一個目標表中;

ALTER PROCEDURE get_rows
AS
begin 
		DECLARE @task_name VARCHAR(1000);
		DECLARE @store_code VARCHAR(100);
		DECLARE @member_code VARCHAR(100);
		DECLARE @addtime bigint;
		DECLARE @num_option_data VARCHAR(100);
		DECLARE cur_f cursor for SELECT task_name,store_code,member_code,addtime,num_option_data from kingkr_task_work;
		open cur_f
		FETCH NEXT from cur_f into @task_name,@store_code,@member_code,@addtime,@num_option_data;
		WHILE @@fetch_status=0
		BEGIN
			INSERT into kingkr_task_work_temp 
			SELECT @task_name,@store_code,@member_code,@addtime,a from dbo.f_splitt('|',@num_option_data);
			FETCH NEXT from cur_f into @task_name,@store_code,@member_code,@addtime,@num_option_data;
		END;
		CLOSE cur_f;
		DEALLOCATE cur_f;
end 

3:分隔成多個值後,再將這多個值排序


SELECT task,store_code,member_code,addtime,num_option_data,
row_number()OVER(partition by member_code,,addtime ORDER BY addtime) mm 
from kingkr_task_work_temp;
partition by member_code,addtime:把member_code,addtime作為一組(分割槽)排序。
結果如下:


相關推薦

MYSQL建立一個一個字串某個分隔符分隔得到” 的函式加上序號

1:首先建立一個自定義函式實現分隔的功能:思路: (1、獲取分隔符在源字串中第一次出現的位置,把獲取的位置之前的子字串賦值給表的一列 (2、把第一步獲取的位置之後的子字串賦值為新的源字串 (3、再獲取分隔符在第二步得到的新的源字串中的位置,並把獲取的位置之前的子字串賦值給表

sql ‘1,2,3,4’轉成相應的表欄位分隔函式一行變

再設計表的時候我們經常遇到這樣的情況,欄位的值為1,2,3,4 等字元隔開的情況,存的是數字,但是顯示的時候是對應的類別,直接上圖,清楚明瞭, 如何想得到 分兩步完成,步驟如下: 第一步先創造 一個表值函式,將1,2,3,4 轉化為 函式是從網上找來的,程式碼如下:

一個二維陣列一維陣列的形式傳給函式

現在要計算二維陣列input每行資料的平均值,我們呼叫下面的aver_line函式。 double aver_line(double []);//計算並返回一維陣列平均值的函式 double input[LINE][ROW];//這是一個二維陣列 for(i=0

需求說明:從鍵盤輸入一個字串統計字串中每個字元的個數。如輸入“adbda”結果a=2d=2b=1。

思路: 使用Scanner接收鍵盤輸入的字串。 使用HashMap統計每個字元的個數,其中key儲存字元,value用來記錄字元的數量。 原始碼: public static void main(String[] args) { //人性化提示資訊。 System

建立一個學生物件並且學生賦屬性

package p1; public class TestStudent{     public static void main(String[] args){         //建立一個學生物件         Student s = new Student();  

資料結構——有序連結串列一個有序連結串列演算法

//將兩個有序連結串列併為一個有序連結串列演算法,該程式也可以cFree環境執行。// c1.h (程式名) #include<string.h> #include<ctype.h> #include<malloc.h> // mallo

有序連結串列一個有序連結串列

#include #include #ifndef FALSE #define FALSE (0) #define TRUE (!FALSE) #endif typedef int ElemType; typedef struct LNode{ // ElemType data; s

【每天演算法4】編寫一個擷取字串函式輸入一個字串和位元組數輸出按位元組擷取的字串

題目: 編寫一個擷取字串的函式,輸入為一個字串和位元組數,輸出為按位元組擷取的字串。   但是要保證漢字不被截半個,如“我ABC”4,應該截為“我AB”,輸入“我ABC漢DEF”,6,應該輸出為“我ABC”而不是“我ABC+漢的半個”。 package com.sw.su

itexthtml字串pdf格式匯出

itext是一款優秀的pdf匯出工具,支援中文。以下記錄itext將html字串(帶中文)以pdf格式匯出。 Java程式碼: <span style="font-size:18px;">public class DocTest { @Test

編寫一個擷取字串函式輸入一個字串和位元組數 輸出按位元組擷取的字串。 但是要保證漢字不被截半

題目: 編寫一個擷取字串的函式,輸入為一個字串和位元組數, 輸出為按位元組擷取的字串。 但是要保證漢字不被截半個,如“我ABC”4, 應該截為“我AB”,輸入“我ABC漢DEF”,6, 應該輸

C#中Split用法(把字串某個字元分隔符分成一個數組)

1、用字串分隔:  using System.Text.RegularExpressions; string str="aaajsbbbjsccc"; string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase); foreach (strin

解決CAD不能同時打開文件打開第二就會自動關閉前一個

href str from span ext spf style aid 就會 訪問主頁 命令: SDI 輸入 SDI 的新值 <0>: 0 關閉CAD,重新打開 解決CAD不能同時打開多個文件,打開第二個就會自動關閉前一個

究極難題 :一個執行10秒以上至無窮的呼叫函式成功後有返回。在工執行緒中怎麼實現呼叫不卡住該執行緒?

究極難題 :一個執行10秒以上至無窮的呼叫函式,成功後有返回值。在多工執行緒中怎麼實現呼叫不卡住該執行緒? Note:一旦呼叫函式,中途無法取消。 思路一:讓其執行在獨立執行緒內。加超時時間。 1. 在超時時間內函式有返回值,則函式執行結束。則獨立執行緒結束。 2. 在超時時

【原創】給定隨機數的取範圍(最小、最大且要求次取得的隨機數最後的結果有一個固定的平均值

給定隨機數的取值範圍(最小值、最大值),且要求多次取得的隨機數最後的結果有一個固定的平均值。 演算法如下: /****** * author ztg 281099678 2018-12-06 * @param $min float 範圍最小值 * @param $max

ACMNO.25 C語言-間隔輸出 寫一函式輸入一個四位數字要求輸出這四數字字元但每兩數字間空格。如輸入1990應輸出"1 9 9 0"。 輸入 一個四位數 輸出 增加空格輸出

題目描述 寫一函式,輸入一個四位數字,要求輸出這四個數字字元,但每兩個數字間空格。如輸入1990,應輸出"1 9 9 0"。 輸入 一個四位數 輸出 增加空格輸出 樣例輸入 1990 樣例輸出 1 9 9 0 來源/分類 C語言

C語言實驗——輸入一個整數的小寫金額轉化大寫金額並輸出

#include <stdio.h> #include <string.h> void trans(int a) { if(a == 1)printf("壹"); else if(a == 2)printf("貳");

有兩連結串列第一升序第二降序合併一個升序連結串列(C++)

#include <iostream> #define NULL 0 using namespace std; struct Node { char data; Node* next; }; Node* create() { Node* head

7IF函式15Excel實用公式一個都不可小瞧哦!

在前一段時間中,給大家分享的都是用GIF動態展示出來的,今天就來創新一下,都是用公式解析的方式來 展現出來的哦,有了這7個函式,15個Excel函式公式,從此再也不用擔心天天加班了,這些公式絕對好用, 都是大家需要的喲! 以上這些Excel函式公式

定義一個二維陣列內容學生的四門課成績求出每個學生四門課的平均分並輸出再求出每門課三學生的平均分並輸出!

// 121211 作業1.cpp : 定義控制檯應用程式的入口點。 // /* * Copyright (c) 2012, 煙臺大學計算機學院 * All rights reserved. * 作 者: 劉同賓