Solved

Microsoft SQL - Count varchar where max len = n

Posted on 2014-02-06
10
573 Views
Last Modified: 2014-02-06
Hello -

Hopefully an easy one for you.  I have a varchar(7) field in which the majority of the values are 7 digit numbers ('#######').  

I'm trying to count the number of records that have a "valid" 7 digit number value in them.  

I tried:

SELECT COUNT(myField) FROM myTable HAVING MAX(LEN(myField)) ='7'
That returned the count of all records in my table.  I know there are some blanks and commas and things in there so I know that's not right - Maybe I should use rtrim/ltrim?  

Then after a little research I found "DATALENGTH" and tried:

SELECT COUNT(myField) FROM myTable WHERE DATALENGTH(myField) ='7'
That returned a count smaller than the total record count (more than half).  This seems realistic but I'm not sure if I'm getting what I'm asking for.  

What would be the best way to go about this?

Thanks!!!
0
Comment
Question by:ttist25
10 Comments
 
LVL 16

Assisted Solution

by:Surendra Nath
Surendra Nath earned 125 total points
Comment Utility
ok you can try the below one

select count(1) from myTable where len(myField) = 7

Open in new window

0
 
LVL 25

Assisted Solution

by:Lee Savidge
Lee Savidge earned 125 total points
Comment Utility
SELECT COUNT(myField) FROM myTable where LEN(myField) =7

Open in new window

0
 
LVL 65

Expert Comment

by:Jim Horn
Comment Utility
>I'm trying to count the number of records that have a "valid" 7 digit number value in them.
Define 'valid'.  Seven characters, all numbers?
0
 
LVL 75

Assisted Solution

by:Aneesh Retnakaran
Aneesh Retnakaran earned 125 total points
Comment Utility
SELECT COUNT(myField) FROM myTable WHERE myfield like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
0
 
LVL 65

Accepted Solution

by:
Jim Horn earned 125 total points
Comment Utility
CREATE TABLE #foo (myField varchar(7) )

INSERT INTO #foo (myField) 
VALUES 
   ('1234567'), ('123,567'), ('  12345'), ('12345  '), ('1234567'), ('(23456)'),
   ('42'), ('one'), (NULL), ('BR549'), ('OU812'), ('foo')

-- Here's your seven numbers
SELECT * FROM #foo WHERE myField LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

-- Here's everything else
SELECT * FROM #foo WHERE myField NOT LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

Open in new window

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 1

Author Closing Comment

by:ttist25
Comment Utility
Thanks for the responses everyone.  I always forget how powerful "LIKE" can be.  

Anyway - I ended up using a combination of LEN(myField) = 7 and NOT LIKE '[0-9] ...' which may redefine what I consider a "valid" value to be (this is all discovery stage analysis).  

Thanks again everyone.  Always good to know you're there!
0
 
LVL 1

Author Comment

by:ttist25
Comment Utility
Jim!  VH fan????  :D
0
 
LVL 65

Expert Comment

by:Jim Horn
Comment Utility
Yes, and I have a couple of sample data sets that use as customers Sammy Hagar, Eddie Van Halen, Joe Satriani, etc.
0
 
LVL 1

Author Comment

by:ttist25
Comment Utility
Hah!  That's great.  I'm a player myself and have recently started building pedals for fun.  My standard test for the sound quality of a prototype pedal has become the opening bars from Drop Dead Legs.  

Ok - that's probably enough off-topic garbage but I had to acknowledge the connection.
0
 
LVL 65

Expert Comment

by:Jim Horn
Comment Utility
In that case check out this question but do me a favor and don't answer it right away, as I want to see how the other yahoos do.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now