Pinal Dave, Blogger,Speaker,Evangelist and Author,in his blog posted a puzzle about SQL SERVER – A Puzzle – Swap Value of Column Without Case Statement
Consider the following set of data
USE tempdb
GO
CREATE TABLE SimpleTable (ID INT, Gender VARCHAR(10))
GO
INSERT INTO SimpleTable (ID, Gender)
SELECT 1, 'female'
UNION ALL
SELECT 2, 'male'
UNION ALL
SELECT 3, 'male'
GO
SELECT *
FROM SimpleTable
There can be many solutions for this. Here are my simple ones
Method 1 : Concatenate empty string and apply replace
select gender,replace(replace (' '+gender,' fe',''),' ','fe') as new_gender from simpletable
Method 2 : Apply multiple replaces
Solution 1
select gender,replace(replace(replace (gender,'male',' '),'fe ','male'),' ','female') as new_gender from simpletable
Solution 2
select gender,replace(replace(replace (gender,'female','X'),'male','female'),'X','male') from simpletable
In all the cases, the results are
gender new_gender
---------- -------------------
female male
male female
male female
Note : Using a CASE expression will be simpler and almost work in all RDBMSs without any code chage