Home » SQL & PL/SQL » SQL & PL/SQL » REGEXP (11.1.0.6.0)
REGEXP [message #530836] Fri, 11 November 2011 00:40 Go to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Hello,

I am checking below email's valid or not.
Per below regexp,it should get all emails in the table and now it's getting 2 records.

regexp we re checking below conditions:

1. Username can be a-A, z-Z, 0-9
2. Leading and Trailing White spaces / Quotations ( ' ) / dot ( . ) ignored.
3. Underscore ( _ ) dot ( . ) and single quote ( ' ) are allowed, It should be middle of the username.
4. There should be only one @.
5. There should be no consecutive dots in the domain name.
select email 
from test 
where REGEXP_LIKE(email,'^[a-zA-Z0-9]+[\w\.\''\_\-]*[a-zA-Z0-9]+[\w\.\''\_\-]*@[a-zA-Z0-9]+[\w\.\''\_\-]*[a-zA-Z0-9]\.[a-zA-Z]+[a-zA-Z\.]*[a-zA-Z]$') 
OUTPUT: 
murali@gmail.com
n.meisel@stadtwerke-wf.de
Insert into TEST (EMAIL) Values ('gerd.meier@kubus-it.de');
Insert into TEST (EMAIL) Values ('edv@diakonie-sh.de');
Insert into TEST (EMAIL) Values ('murali@gmail.com');
Insert into TEST (EMAIL) Values ('n.meisel@stadtwerke-wf.de');
COMMIT;

Please help me..
Re: REGEXP [message #530837 is a reply to message #530836] Fri, 11 November 2011 00:43 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

CREATE TABLE TEST
(
  EMAIL  VARCHAR2(1000 BYTE)
)
Re: REGEXP [message #530844 is a reply to message #530837] Fri, 11 November 2011 01:31 Go to previous messageGo to next message
John Watson
Messages: 4081
Registered: January 2010
Location: Global Village
Senior Member
Have you looked at the utl_smtp.vrfy function?
Re: REGEXP [message #530849 is a reply to message #530844] Fri, 11 November 2011 01:35 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
... you can also search here as we already answered such question in details.

Regards
Michel
Re: REGEXP [message #530852 is a reply to message #530836] Fri, 11 November 2011 01:45 Go to previous messageGo to next message
_jum
Messages: 485
Registered: February 2008
Senior Member
There is a problem in the pattern [\w].
It doesn't match any word character as (from me ?!) expected, but only a letter 'w'. See the simplified example below:
WITH data AS
 (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  SELECT 'murali@gmail.com'             FROM dual UNION ALL
  SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
SELECT email FROM data
WHERE REGEXP_LIKE(email,'^.*@.*\-[\w][a-Z]+\.de$'); 
 
EMAIL                    
-------------------------
n.meisel@stadtwerke-wf.de

WITH data AS
 (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  SELECT 'murali@gmail.com'             FROM dual UNION ALL
  SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
SELECT email FROM data
WHERE REGEXP_LIKE(email,'^.*@.*\-[w][a-Z]+\.de$') ;
EMAIL                    
-------------------------
n.meisel@stadtwerke-wf.de

WITH data AS
 (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  SELECT 'murali@gmail.com'             FROM dual UNION ALL
  SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
SELECT email FROM data
WHERE REGEXP_LIKE(email,'^.*@.*\-\w[a-Z]+\.de$');

EMAIL                    
-------------------------
gerd.meier@kubus-it.de   
edv@diakonie-sh.de       
n.meisel@stadtwerke-wf.de
 


Re: REGEXP [message #530853 is a reply to message #530852] Fri, 11 November 2011 01:54 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
What is your Oracle version?
Here's what I get in 10.2.0.4 and 11.2.0.1 with what you posted:

SQL> WITH data AS
  2   (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  3    SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  4    SELECT 'murali@gmail.com'             FROM dual UNION ALL
  5    SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
  6  SELECT email FROM data
  7  WHERE REGEXP_LIKE(email,'^.*@.*\-[\w][a-Z]+\.de$'); 
WHERE REGEXP_LIKE(email,'^.*@.*\-[\w][a-Z]+\.de$')
                        *
ERROR at line 7:
ORA-12728: invalid range in regular expression


SQL> WITH data AS
  2   (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  3    SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  4    SELECT 'murali@gmail.com'             FROM dual UNION ALL
  5    SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
  6  SELECT email FROM data
  7  WHERE REGEXP_LIKE(email,'^.*@.*\-[w][a-Z]+\.de$') ;
WHERE REGEXP_LIKE(email,'^.*@.*\-[w][a-Z]+\.de$')
                        *
ERROR at line 7:
ORA-12728: invalid range in regular expression


SQL> WITH data AS
  2   (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  3    SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  4    SELECT 'murali@gmail.com'             FROM dual UNION ALL
  5    SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
  6  SELECT email FROM data
  7  WHERE REGEXP_LIKE(email,'^.*@.*\-\w[a-Z]+\.de$');
WHERE REGEXP_LIKE(email,'^.*@.*\-\w[a-Z]+\.de$')
                        *
ERROR at line 7:
ORA-12728: invalid range in regular expression


Regards
Michel
Re: REGEXP [message #530854 is a reply to message #530853] Fri, 11 November 2011 02:23 Go to previous messageGo to next message
_jum
Messages: 485
Registered: February 2008
Senior Member
Tested the script with.
Oracle 10.2.0.4.0 - 64bit
Oracle 11.1.0.7.0 - 64bit
-> same result - no error
NLS_SORT is set to GERMAN
NLS_SORT=BINARY could give ORA-12728

[Updated on: Fri, 11 November 2011 02:27]

Report message to a moderator

Re: REGEXP [message #530855 is a reply to message #530854] Fri, 11 November 2011 02:30 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Hey Guys,we should not hotcode the values as '.de' like
Re: REGEXP [message #530862 is a reply to message #530854] Fri, 11 November 2011 03:05 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
_jum wrote on Fri, 11 November 2011 09:23
Tested the script with.
Oracle 10.2.0.4.0 - 64bit
Oracle 11.1.0.7.0 - 64bit
-> same result - no error
NLS_SORT is set to GERMAN
NLS_SORT=BINARY could give ORA-12728


So it is a NLS issue, open a SR.

Regards
Michel

Re: REGEXP [message #530864 is a reply to message #530855] Fri, 11 November 2011 03:06 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
muralikri wrote on Fri, 11 November 2011 09:30
Hey Guys,we should not hotcode the values as '.de' like


We don't talk about your issue but another one.
Yours is already addressed, just do what John and I said.

Regards
Michel

Re: REGEXP [message #530870 is a reply to message #530864] Fri, 11 November 2011 03:26 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Raising the above error as post by Micheal.
Is there any way?
Re: REGEXP [message #530871 is a reply to message #530870] Fri, 11 November 2011 03:28 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
Michel Cadot wrote on Fri, 11 November 2011 10:06
...just do what John and I said.

Regards
Michel

Re: REGEXP [message #530879 is a reply to message #530871] Fri, 11 November 2011 03:47 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

it's not working. Why John hotcoding the value.
I need without hotcode,because othere than ".de" contains email,how can check. it should be dynamic.
Re: REGEXP [message #530881 is a reply to message #530879] Fri, 11 November 2011 03:50 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
John didn't talk about '.de', just pointed you to a function.
So have a look at it!
And I pointed you to the fact we already addressed this issue with a COMPLETE solution.
So search it!

Regards
Michel
Re: REGEXP [message #530882 is a reply to message #530881] Fri, 11 November 2011 03:52 Go to previous messageGo to next message
Littlefoot
Messages: 18822
Registered: June 2005
Location: Croatia, Europe
Senior Member
Account Moderator
Also, if you want to take a look, here's another one:How to Find or Validate an Email Address.
Re: REGEXP [message #530889 is a reply to message #530882] Fri, 11 November 2011 04:38 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Tryed this one it'rasing the invalid releation operation...

select * from  dual
where ('gerd.meier@kubus-it.de' ,'([a-z0-9!#$%&''*+/=?^_''`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_''`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?')
Re: REGEXP [message #530890 is a reply to message #530889] Fri, 11 November 2011 04:42 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
Use SQL*Plus and copy and paste your session, the WHOLE session.

Regards
Michel
Re: REGEXP [message #530891 is a reply to message #530890] Fri, 11 November 2011 04:44 Go to previous messageGo to next message
Littlefoot
Messages: 18822
Registered: June 2005
Location: Croatia, Europe
Senior Member
Account Moderator
"WHERE" what? Aren't you missing something?
Re: REGEXP [message #530892 is a reply to message #530891] Fri, 11 November 2011 04:46 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

SQL> select * from  dual
  2  where ('gerd.meier@kubus-it.de' ,'([a-z0-9!#$%&''*+/=?^_''`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_''`
{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?')
  3  
SQL> /
where ('gerd.meier@kubus-it.de' ,'([a-z0-9!#$%&''*+/=?^_''`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_''`{|}~-
                                                                                                    
ERROR at line 2:
ORA-00920: invalid relational operator
Re: REGEXP [message #530897 is a reply to message #530892] Fri, 11 November 2011 05:05 Go to previous messageGo to next message
cookiemonster
Messages: 10571
Registered: September 2008
Location: Rainy Manchester
Senior Member
You've not called any regexp function there.
Re: REGEXP [message #530898 is a reply to message #530897] Fri, 11 November 2011 05:13 Go to previous messageGo to next message
_jum
Messages: 485
Registered: February 2008
Senior Member
Because of the problem with '\w' You should use '[:alnum:]' instead see REG_EXP . So Your first SELECT works:
WITH data AS
 (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  SELECT 'murali@gmail.com'             FROM dual UNION ALL
  SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
SELECT email FROM data
 WHERE REGEXP_LIKE(email,'^[a-zA-Z0-9]+[[:alnum:]\.\''\_\-]*[a-zA-Z0-9]+[[:alnum:]\.\''\_\-]*@[a-zA-Z0-9]+[[:alnum:]\.\''\_\-]*[a-zA-Z0-9]\.[a-zA-Z]+[a-zA-Z\.]*[a-zA-Z]$');

EMAIL                    
-------------------------
gerd.meier@kubus-it.de   
edv@diakonie-sh.de       
murali@gmail.com         
n.meisel@stadtwerke-wf.de

[Updated on: Fri, 11 November 2011 05:15]

Report message to a moderator

Re: REGEXP [message #530901 is a reply to message #530897] Fri, 11 November 2011 05:16 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Tried,getting same error.. help me
select * from  dual
where REGEXP_LIKE('gerd.meier@kubus-it.de','[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_\`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?')
Re: REGEXP [message #530902 is a reply to message #530901] Fri, 11 November 2011 05:19 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

find the expression from http://www.regular-expressions.info/email.html
not working for me.
Re: REGEXP [message #530903 is a reply to message #530902] Fri, 11 November 2011 05:21 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

i tried this one,not raising the error and not getting the result.

select * from dual
where  REGEXP_LIKE('gerd.meier@gmail.com','[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?')
Re: REGEXP [message #530911 is a reply to message #530902] Fri, 11 November 2011 05:54 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
muralikri wrote on Fri, 11 November 2011 12:19
find the expression from http://www.regular-expressions.info/email.html
not working for me.


Did you do what John and I said you to do?

Regards
Michel

Re: REGEXP [message #530917 is a reply to message #530911] Fri, 11 November 2011 06:03 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Aleady i updated to you,John posted that one,that is not right way.
Did you find any in my sql...
Re: REGEXP [message #530919 is a reply to message #530903] Fri, 11 November 2011 06:06 Go to previous messageGo to next message
_jum
Messages: 485
Registered: February 2008
Senior Member
Why do You use a very complicated regular expression, that You (I suspect) don't understand?
WITH data AS
 (SELECT 'gerd.meier@kubus-it.de' email FROM dual UNION ALL
  SELECT 'edv@diakonie-sh.de'           FROM dual UNION ALL
  SELECT 'murali@gmail.com'             FROM dual UNION ALL
  SELECT 'n.meisel@stadtwerke-wf.de'    FROM dual)
SELECT email FROM data
 WHERE regexp_like(email,
   '[a-z0-9!#$%&''*+/=?^_`{|}~-]+(\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?');

EMAIL                    
-------------------------
gerd.meier@kubus-it.de   
edv@diakonie-sh.de       
murali@gmail.com         
n.meisel@stadtwerke-wf.de

This pattern will match all emails, but I didn' check all parts of the pattern...
Re: REGEXP [message #530928 is a reply to message #530919] Fri, 11 November 2011 06:33 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Thanks million....Working fine.
Re: REGEXP [message #530929 is a reply to message #530928] Fri, 11 November 2011 06:36 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

John,this is invalid email,because it contians conceruence dots.....

"gerd9===9_.meier@kubus-it.de......it" this invalid email
Re: REGEXP [message #530933 is a reply to message #530929] Fri, 11 November 2011 06:44 Go to previous messageGo to next message
John Watson
Messages: 4081
Registered: January 2010
Location: Global Village
Senior Member
Hello, again, Muraliki. It looks as though you have no intention on commenting on my suggestion that you should try UTL_SMTP.VRFY instead of these awful REGEXP techniques. But in case anyone else is interested, here's a way of testing not only if an address is usable, but also whether it actually exists.
set serveroutput on

declare 
c utl_smtp.connection;
r utl_smtp.reply;

begin
c := UTL_SMTP.OPEN_CONNECTION('orafaq.com');
UTL_SMTP.HELO(c, 'foo.com');
r := utl_smtp.vrfy(c,'muraliki@orafaq.com');
dbms_output.put_line(r.code||' '||r.text);
end;
/

Works beautifully. Of course, the response code you get back will depend on whether the adderss is recognized and how the smtp server is configured.
Re: REGEXP [message #530934 is a reply to message #530933] Fri, 11 November 2011 06:51 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

i am not able undetstand..how can i used this code...
Re: REGEXP [message #530935 is a reply to message #530934] Fri, 11 November 2011 06:57 Go to previous messageGo to next message
John Watson
Messages: 4081
Registered: January 2010
Location: Global Village
Senior Member
Quote:
i am not able undetstand..how can i used this code...

1. Run it.
2. Substitute real addresses.
3. Re-write and debug to fit your needs.
4. Say "thank you" to me and everyone else who has tried to assist you.

Re: REGEXP [message #530936 is a reply to message #530935] Fri, 11 November 2011 07:02 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Thanks for great help..............

i ran this code,if passing wrong email id also working.
declare 
c utl_smtp.connection;
r utl_smtp.reply;

begin
c := UTL_SMTP.OPEN_CONNECTION('orafaq.com');
UTL_SMTP.HELO(c, 'foo.com');
r := utl_smtp.vrfy(c,'muraliki@orafaq.com');
dbms_output.put_line(r.code||' '||r.text);
end;
/
Re: REGEXP [message #530937 is a reply to message #530936] Fri, 11 November 2011 07:03 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

declare 
c utl_smtp.connection;
r utl_smtp.reply;

begin
c := UTL_SMTP.OPEN_CONNECTION('orafaq.com');
UTL_SMTP.HELO(c, 'foo.com');
r := utl_smtp.vrfy(c,'muraliki@@orafaq.com');
dbms_output.put_line(r.code||' '||r.text);
end;
/
Re: REGEXP [message #530940 is a reply to message #530937] Fri, 11 November 2011 07:24 Go to previous messageGo to next message
John Watson
Messages: 4081
Registered: January 2010
Location: Global Village
Senior Member
Well, here's another example.
orcl> set serveroutput on
orcl>
orcl> declare
  2  c utl_smtp.connection;
  3  r utl_smtp.reply;
  4
  5  begin
  6  c := UTL_SMTP.OPEN_CONNECTION('smtp.gmail.com');
  7  UTL_SMTP.HELO(c, 'foo.com');
  8  r := utl_smtp.vrfy(c,'john.smith@gmail.com');
  9  dbms_output.put_line(r.code||' '||r.text);
 10  end;
 11  /
252 2.1.5 Send some mail, I'll try my best i8sm6875581wie.11

PL/SQL procedure successfully completed.

orcl>
orcl>
But you'll have to do some work, you know. For instance, sorting out the difference between MX records and A records. You network people will tell you all about that.
Re: REGEXP [message #530941 is a reply to message #530940] Fri, 11 November 2011 07:35 Go to previous messageGo to next message
muralikri
Messages: 638
Registered: August 2011
Location: chennai
Senior Member

Thanks lot, good help..
Re: REGEXP [message #530949 is a reply to message #530941] Fri, 11 November 2011 07:57 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
muralikri wrote on Fri, 11 November 2011 14:35
Thanks lot, good help..


Help? You want to say thanks to do ly job.
This is NOT just help.
You try nothing of what we told you, you just wanted we do your work and waste many's time.

As I told you, in addition to John function, we already gave a COMPLETE solution, but you are too lazy to search it.

Regards
Michel

[Updated on: Fri, 11 November 2011 08:01]

Report message to a moderator

Re: REGEXP [message #573417 is a reply to message #530949] Fri, 28 December 2012 05:08 Go to previous messageGo to next message
sss111ind
Messages: 425
Registered: April 2012
Location: India
Senior Member

Hi All,


I want to select those data which contains only signle emails.How it possible.
WITH data AS
  ( SELECT 'gerd.meier@kubus-it.de' email FROM dual
  UNION ALL
  SELECT 'edv@diakonie-sh.de' FROM dual
  UNION ALL
  SELECT 'abc@gmail.com,abc@gmail.com' FROM dual
  UNION ALL
  SELECT 'n.meisel@stadtwerke-wf.de' FROM dual
  )
SELECT email
FROM data
WHERE regexp_like(email,'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]+') ;


Regards,
Nathan
Re: REGEXP [message #573418 is a reply to message #573417] Fri, 28 December 2012 05:10 Go to previous messageGo to next message
Michel Cadot
Messages: 57605
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
Remove those that contains a comma.

Regards
Michel
Re: REGEXP [message #573421 is a reply to message #573418] Fri, 28 December 2012 05:15 Go to previous messageGo to previous message
sss111ind
Messages: 425
Registered: April 2012
Location: India
Senior Member

Hi Michel,

I got from your post only.Thanks.
A complete email validation string is:

"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"


Regards,
Nathan

[Updated on: Fri, 28 December 2012 06:00]

Report message to a moderator

Previous Topic: Need a little help in deriving the logic
Next Topic: Oracle query error
Goto Forum:
  


Current Time: Thu Apr 17 04:56:00 CDT 2014

Total time taken to generate the page: 0.12008 seconds