简体   繁体   中英

Change Case to Upper & Lower in SQL Query SELECT

I have a SQL Query to pull a customer name from database, create a customer folder with that name. In the query I am killing slashes and periods, and i am also changing any result containing MCDONALD to SIMPLY "MCDONALDS". So MCDONALDS #123 comes out as simply MCDONALDS. Here is my query.

SELECT 
    CASE WHEN CHARINDEX('MCDONALD', cust_name) = 0
        THEN REPLACE(REPLACE([cust_name],'.',''),'--','-')
        ELSE 'MCDONALDS'
    END  cust_name
FROM job,dbo.cust cust_name
WHERE job.cust_id_bill_to = cust_name.cust_code AND
job.job_id = '44321' AND
job.sub_job_id = '2'

So, results now are:

 MCDONALDS, BRISTOL-MYERS, TRUMP-CASINO 

Desired results is upper and lower case in every word.. like this:

 Mcdonalds, Bristol-Myers, Trump-Casino 

I know its easy but for me its how to have it work WITH the rest of my query, what I am trying just not working so far.

Check Nimit Dudani Answer Here

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`initcap`$$

CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8
BEGIN
SET @str='';
SET @l_str='';
WHILE x REGEXP ' ' DO
SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str;
SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x;
SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str;
END WHILE;
RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2)))));
END$$

DELIMITER ;

Usage:

select initcap('This is test string');

For Sql Server you can use this

INITCAP User defined Function code

IF OBJECT_ID('dbo.InitCap') IS NOT NULL
    DROP FUNCTION dbo.InitCap;
  GO

 CREATE FUNCTION dbo.InitCap (@inStr VARCHAR(8000))
  RETURNS VARCHAR(8000)
  AS
  BEGIN
    DECLARE @outStr VARCHAR(8000) = LOWER(@inStr),
         @char CHAR(1), 
         @alphanum BIT = 0,
         @len INT = LEN(@inStr),
                 @pos INT = 1;        

    -- Iterate through all characters in the input string
    WHILE @pos <= @len BEGIN

      -- Get the next character
      SET @char = SUBSTRING(@inStr, @pos, 1);

      -- If the position is first, or the previous characater is not alphanumeric
      -- convert the current character to upper case
      IF @pos = 1 OR @alphanum = 0
        SET @outStr = STUFF(@outStr, @pos, 1, UPPER(@char));

      SET @pos = @pos + 1;

      -- Define if the current character is non-alphanumeric
      IF ASCII(@char) <= 47 OR (ASCII(@char) BETWEEN 58 AND 64) OR
      (ASCII(@char) BETWEEN 91 AND 96) OR (ASCII(@char) BETWEEN 123 AND 126)
      SET @alphanum = 0;
      ELSE
      SET @alphanum = 1;

    END

   RETURN @outStr;         
  END
  GO

Testing :

SELECT dbo.InitCap('new york');

Result: New York

For your query

SELECT 
    dbo.InitCap(CASE WHEN CHARINDEX('MCDONALD', cust_name) = 0
                    THEN REPLACE(REPLACE([cust_name],'.',''),'--','-')
                    THEN 'MCDONALDS'
               END)  cust_name
FROM job,dbo.cust cust_name
WHERE job.cust_id_bill_to = cust_name.cust_code AND
job.job_id = '44321' AND
job.sub_job_id = '2'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM