update table removing some data - sql

Could anyone help me with a command on SQL to update a column as this example bellow.
IP : 192.168.010.001
I need to remove zero and update column to be like this:
IP : 192.168.10.1

If you need to remove the last four characters, then most databases support LEFT():
update table t
set col = left(col, length(col) - 4);
The name of the length() function also differs among databases (typically either len() or length()). And substr()/substring() could be used instead of left().
EDIT:
Ahhh, Jeffrey pointed out that the above is an incorrect interpretation. I misread the numbers. There is a method to do this, which is pretty database independent. Generally, there will not be more than two zeros after a period (if there are three, then you probably want the third). So:
update table t
set ip = replace(replace(ip, '.0', '.'), '.0', '.')
where ip like '%.0%';

which Database you are using , if you are using Sybase you can try str_replace and use to replace pattern like '.0' or '.00' to '' .
Query could be something like this
`update X set Y=str_replace(Y,'.0','.') where Y like '%.0%' `
and
`update X set Y=str_replace(Y,'.00','.') where Y like '%.00%' `

A simple replace twice will also work:
replace(replace('192.168.010.001','.0','.'),'.0','.')
or
IP_Field = replace(replace(IP_Field,'.0','.'),'.0','.')

Related

How to replace sql field case-sensitive value

I have one case-sensitive column.
How can I replace (Shpersonel,shPersonel, sHperSonel) to ShPersonel in all records?
my column Data is:
1- SHpersonel = 12 And Password= Ayuy122
2- ShpeRsonel = 10 And Password= jkjIUD122
3- ShPersonel = 08 And Password= Kjjam
...
You could use LOWER (or UPPER), which lots of DBMSes support, to look for a value case insensitively and update:
update your_table
set col = 'ShPersonel'
where lower(col) = 'shpersonel';
EDIT:
Further clarification explained that above data is stored in a single column - Which is not how it should be stored.
You should store the data in separate columns and then look for further normalization to remove unwanted dependencies.
UPDATE your_table
SET your_column = 'ShPersonel'
WHERE upper(your_column) = 'SHPERSONEL';
You didn't say what DBMS you're using. If it's SQL-Server, the following should work for you:
update MyTable
set TheData =
concat(
left(TheData,charindex('shpersonel',lower(t.TheData))-1),
'ShPersonel',
right(t.TheData,len(t.TheData) - charindex('shpersonel',lower(t.TheData)) - len('ShPersonel'))
)
from MyTable t
where
charindex('shpersonel',lower(t.TheData))>0
For other DBMS's you need to replace charindex with whatever that DBMS's equivalent may be. For example, Oracle and MySQL use InStr (which needs its arguments in the reverse order).

Removing last character in ACCESS if it is "."

I am trying to write an update query that will remove the last character if it is a period ("."). In EXCEL, I would use the following statement:
=IF(RIGHT(A1,1)=".",LEFT(A1,LEN(A1)-1),A1)
How can I modify this for ACCESS? I found the following statement in a forum, but ACCESS seems to have a problem with "Substring" and won't let me run the query.
UPDATE table SET field = SUBSTRING(field, 1, CHAR_LENGTH(field) - 1)WHERE field LIKE '%.'
Any thoughts?
I think the right way to do this in Access is:
UPDATE table
SET field = LEFT(field, LEN(field) - 1)
WHERE field LIKE '*.' ;
Note that the like wildcards are different in MS Access.
You could simply create a substring that was one character shorter than your existing string if it ended with a period via the LEFT() function :
UPDATE YourTable
SET YourColumn = LEFT(YourColumn, LEN(YourColumn - 1))
WHERE YourColumn LIKE '*.'

SQL update for the varchar column

I want to change the string of AttachmentCopyLoc columns from D:\IT\Public\FTX_RobotAlerts\336 to V:\IT\Public\FTX_RobotAlerts\336 only change here is D to V, the remaining string is the same (I don't event want to change that).
How can I do that?
Thanks in advance for your help.
The exact syntax depends on the platform, but it would be something akin to
UPDATE {table}
SET AttachmentCopyLoc = REPLACE ( AttachmentCopyLoc , 'D:' , 'V:' )
WHERE AttachmentCopyLoc LIKE 'D:%'
In SQL Server, I would recommend using stuff():
update t
set AttachmentCopyLoc = stuff(AttachmentCopyLoc, 1, 1, 'V')
where AttachmentCopyLoc like 'D:%';
This version has two advantages:
The use of STUFF() ensures that only the first occurrence of 'D:' is replaced. Admittedly, it is unlikely that this substring occurs more than once in the column, but why take the chance?
The use of LIKE allows an index on AttachmentCopyLoc to be used, if one is available and use of hte index is appropriate.
Another way would be basic string manipulation
UPDATE {table}
SET AttachmentCopyLoc ='V' + substring(AttachmentCopyLoc,2,len(AttachmentCopyLoc ))
where AttachmentCopyLoc like 'D%'
This will only alter the first letter of the string:
update <tablename>
set AttachmentCopyLoc = 'V'+substring(AttachmentCopyLoc,2,len(AttachmentCopyLoc)-1)

How to update text using "regular expressions" in SQL Server?

In a column in a SQL Server database table, the value has a format of X=****;Y=****;Z=5****, where the asterisks represent strings of any lengths and of any values. What I need to do is to change that 5 to a 4 and keep the rest of the string unchanged.
Is there a way to use something like regular expressions to achieve what I want to do? If not using regular expressions, can it be done at all?
MS SQL sadly doesn't have any built in regex support (although it can be added via CLR) but if the format is fixed so that the part you want to change isZ=5toZ=4then usingREPLACEshould work:
REPLACE(your_string,'Z=5','Z=4')
For example:
declare #t table (str varchar(max))
insert #t values
('X=****;Y=****;Z=5****'),
('X=****;Y=**df**;Z=3**sdf**'),
('X=11**;Y=**sdfdf**;Z=5**')
update #t
set str = replace(str,'Z=5','Z=4')
-- or a slightly more ANSI compliant and portable way
update #t
set str = SUBSTRING(str,0, CHARINDEX('Z=5', str)) + 'Z=4' + SUBSTRING(str, CHARINDEX('Z=5', str)+3,LEN(str))
select * from #t
str:
X=****;Y=****;Z=4****
X=****;Y=**df**;Z=3**sdf**
X=11**;Y=**sdfdf**;Z=4**
We need more information. Under what circumstances should 5 be replaced by 4? If it's just where it occurs as the first character after the Z=, then you could simply do...
set Col = Replace(Col,'Z=5','Z=4')
Or, do you just want to replace 5 with 4 anywhere in the column value. In which case you'd obviously just do...
set Col = Replace(Col,'5','4')
Or possibly you mean that 5's should be replaced by 4's anywhere within the value after Z= which would be a lot harder.
update Table set Field = replace(Field, ';Z=5', ';Z=4')
And let's hope that your asterisked data doesn't contain semicolons and equality signs...

Regular expressions inside SQL Server

I have stored values in my database that look like 5XXXXXX, where X can be any digit. In other words, I need to match incoming SQL query strings like 5349878.
Does anyone have an idea how to do it?
I have different cases like XXXX7XX for example, so it has to be generic. I don't care about representing the pattern in a different way inside the SQL Server.
I'm working with c# in .NET.
You can write queries like this in SQL Server:
--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'
stored value in DB is: 5XXXXXX [where x can be any digit]
You don't mention data types - if numeric, you'll likely have to use CAST/CONVERT to change the data type to [n]varchar.
Use:
WHERE CHARINDEX(column, '5') = 1
AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
AND ISNUMERIC(column) = 1
References:
CHARINDEX
ISNUMERIC
i have also different cases like XXXX7XX for example, so it has to be generic.
Use:
WHERE PATINDEX('%7%', column) = 5
AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
AND ISNUMERIC(column) = 1
References:
PATINDEX
Regex Support
SQL Server 2000+ supports regex, but the catch is you have to create the UDF function in CLR before you have the ability. There are numerous articles providing example code if you google them. Once you have that in place, you can use:
5\d{6} for your first example
\d{4}7\d{2} for your second example
For more info on regular expressions, I highly recommend this website.
Try this
select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'
Of course, you'll need to adjust the substring value, but the rest should work...
In order to match a digit, you can use [0-9].
So you could use 5[0-9][0-9][0-9][0-9][0-9][0-9] and [0-9][0-9][0-9][0-9]7[0-9][0-9][0-9]. I do this a lot for zip codes.
SQL Wildcards are enough for this purpose. Follow this link: http://www.w3schools.com/SQL/sql_wildcards.asp
you need to use a query like this:
select * from mytable where msisdn like '%7%'
or
select * from mytable where msisdn like '56655%'