2015-02-19 3 views
1

Я разработал функцию для split string в tsql, но mysql не имеет встроенных функций. Мне нужно было функционировать в MYSQL, поскольку я новичок в mysql. Функция должна принимать 2 параметра 1. Строка, подлежащая разделению 2. разделитель (',' или что-то еще) Просьба ответить.Как преобразовать TSQL-запрос в запрос MYSQL?

+0

возможно дубликат [конвертировать TSQL в MySQL] (http://stackoverflow.com/questions/2986404/convert-tsql-to-mysql) –

+0

Вы можете использовать 'SUBSTRING (@ orig, LOCATE (@findstr, @orig)) ' – MiltoxBeyond

+0

Каков результат вашей функции« split string »T-SQL? Мы можем легко написать функцию MySQL, которая принимает два параметра. Жесткая часть подражает тому, что делает ваша функция «split string» SQL Server. – spencer7593

ответ

0

я нашел решение в Интернете, вы можете в этом.

DELIMITER // 
DROP FUNCTION IF EXISTS `splitAndTranslate` // 
CREATE FUNCTION splitAndTranslate(str TEXT, delim VARCHAR(124)) 
RETURNS TEXT 
DETERMINISTIC 
BEGIN 
    DECLARE i INT DEFAULT 0; -- total number of delimiters 
    DECLARE ctr INT DEFAULT 0; -- counter for the loop 
    DECLARE str_len INT;  -- string length,self explanatory 
    DECLARE out_str text DEFAULT ''; -- return string holder 
    DECLARE temp_str text DEFAULT ''; -- temporary string holder 
    DECLARE temp_val VARCHAR(255) DEFAULT ''; -- temporary string holder for query 

    -- get length 
    SET str_len=LENGTH(str);  

    SET i = (LENGTH(str)-LENGTH(REPLACE(str, delim, '')))/LENGTH(delim) + 1;  
     -- get total number delimeters and add 1 
     -- add 1 since total separated values are 1 more than the number of delimiters 

    -- start of while loop 
    WHILE(ctr<i) DO 
     -- add 1 to the counter, which will also be used to get the value of the string 
     SET ctr=ctr+1; 

     -- get value separated by delimiter using ctr as the index 
     SET temp_str = REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, ctr), LENGTH(SUBSTRING_INDEX(str, delim,ctr - 1)) + 1), delim, ''); 

     -- query real value and insert into temporary value holder, temp_str contains the exploded ID   
     SELECT <real_value_column> INTO temp_val FROM <my_table> WHERE <table_id>=temp_str; 

     -- concat real value into output string separated by delimiter 
      SET out_str=CONCAT(out_str, temp_val, ','); 
    END WHILE; 
    -- end of while loop 

    -- trim delimiter from end of string 
    SET out_str=TRIM(TRAILING delim FROM out_str); 
    RETURN(out_str); -- return 

END// 

ссылка http://www.slickdev.com/2008/09/15/mysql-query-real-values-from-delimiter-separated-string-ids/

+1

спасибо за помощь - @ ehtasham я буду смотреть в то, что тогда сообщит вам об этом –

0

В mysql они не поддерживают некоторые функции, такие как sqlserver. так spliting будет трудно в MySQL

SELECT e.`studentId`, SPLIT(",", c.`courseNames`)[e.`courseId`] 

ОТ ..

SELECT TRIM(SUBSTRING_INDEX(yourcolumn,',',1)), TRIM(SUBSTRING_INDEX(yourcolumn,',',-1)) FROM yourtable 
+0

Если 'yourcolumn' содержит более одного символа разделителя (запятая в этом примере), первое выражение вернет часть строки до первого разделителя, а второе выражение будет возвращать часть строки после последнего разделителя. Например, при задании '' abc, def, ghi'' первое выражение возвращает '' abc'', второе выражение возвращает '' ghi''. – spencer7593

+0

требуется время, но это решение, поэтому мне нужно перейти в lop для длины строки, а затем установить индекс. но теперь часть заключается в том, что использование цикла в запросе mysql @Ehtasham –

0
CREATE FUNCTION [dbo].[SplitString] 
(
    @RowData nvarchar(2000), 
    @SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table 
(
    --Id int identity(1,1), 
    Data nvarchar(100) 
) 
AS 
BEGIN 
    Declare @Cnt int 
    Set @Cnt = 1 

    While (Charindex(@SplitOn,@RowData)>0) 
    Begin 
     Insert Into @RtnValue (data) 
     Select 
      Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1))) 

     Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData)) 
     Set @Cnt = @Cnt + 1 
    End 

    Insert Into @RtnValue (data) 
    Select Data = ltrim(rtrim(@RowData)) 

    Return 
END 
+0

возвращает все значения, подобные строкам, и я могу использовать его в where where. Но мне это нужно в mysql. я пробовал много googling его и myslef, но еще не удалось –

Смежные вопросы