简体   繁体   中英

How do I return a value if the string is between 6 and 10 characters in SQL?

I have a column of data where the length of each entry varies, eg

12345678
123
AA
12345678912345
......

I wish to return value if the string length is between 6 and 10. If it's less than 6 or greater than 10, then return a blank.

In my example I would have one value 12345678 showing and three blanks.

You can use LEN function to test length of column value and CASE to return the value you want (supposing the column name is "field"):

SELECT CASE WHEN (LEN(field) >= 6 AND LEN(field) <= 10) 
       THEN field 
       ELSE '' END as 'YourField'
FROM nameoftable

To get it without the blanks you would do:

SELECT FIELD
FROM table_name
WHERE LEN(FIELD) >= 6 AND LEN(FIELD) <= 10

If you don't mind having the output for each row presented in a new column, you could do the following:

Assume the data you have is stored in "colA" in a table called "yourTable", then:

select case when len(colA) between 6 and 10 then colA else '' end as colB from yourTable

The syntax above will work in Microsoft SQL Server. You may have to tweak to find the equivalent length and comparison functions in whichever RDMS you happen to be using.

Another issue you may face is data type conversion issues. If your colA is defined as a character field, the code above should work without issue (ie, you'll get blanks back for values outside of your test criteria). If colA is numeric, then using '' to insert a blank may actually return 0. It's up to you to decide how you want to handle this issue.

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